mahieddine
mahieddine

Reputation: 565

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

Upvotes: 0

Views: 825

Answers (1)

mahieddine
mahieddine

Reputation: 565

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

Upvotes: 1

Related Questions