Search code examples
solrsolrj

How to perform a case insensitive solr query with solrj


I'm using Solrj as a client for Solr, in order to perform a case-insensitive query, i've declared the custom following type in my schema.xml file

<fieldType name="text_ci" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Then i have a field that uses this type, the match is executed against this field

<field name="name" type="text_ci" indexed="true"  stored="true"/>

The problem is when i execute my query in Solrj's admin panel everything is fine and i got my results but from my java application (using solrj) the search seems to be case sensitive and i didn't find where i can specify and tell solrj that i want to perform a case insensitive search

As asked i've added here my solrj code

String[] filters = new String[1];    
filters[0] = "name:\"Obama\”";
String[] fields = new String[] { "uuid", "name" };
q = "all:*%s*";
SolrQuery query = new SolrQuery();
query.setQuery(q);
query.addFilterQuery(filters);
query.setFields(fields);
query.setStart(0);  
query.setRows(5);
QueryResponse response = this.solrInstance.query(query);
SolrDocumentList results = response.getResults();

Do you have any idea guys ? Did i miss something ?

Thank you


Solution

  • I ended up creating a new type

      <fieldType name="ci_text" class="solr.TextField">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
      </fieldType>
    
    
      <field name="mysuperfield" type="ci_text" indexed="true"  stored="true"/>
    

    With this type now i can perform case-incensitive search on mysuperfield