如何使用 solrj 执行不区分大小写的 solr 查询
How to perform a case insensitive solr query with solrj
我使用 Solrj 作为 Solr 的客户端,为了执行不区分大小写的查询,我在 schema.xml 文件
中声明了自定义以下类型
<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>
然后我有一个使用这个类型的字段,匹配是针对这个字段执行的
<field name="name" type="text_ci" indexed="true" stored="true"/>
问题是当我在 Solrj 的管理面板中执行我的查询时,一切都很好,我得到了我的结果,但是从我的 java 应用程序(使用 solrj)中,搜索似乎区分大小写,但我没有找到我可以指定的位置并告诉 solrj 我想执行不区分大小写的搜索
根据要求,我已经在此处添加了我的 solrj 代码
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();
你们有什么想法吗?我错过了什么吗?
谢谢
我最终创建了一个新类型
<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"/>
有了这个类型,我现在可以在 mysuperfield 上执行区分大小写的搜索
我使用 Solrj 作为 Solr 的客户端,为了执行不区分大小写的查询,我在 schema.xml 文件
中声明了自定义以下类型<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>
然后我有一个使用这个类型的字段,匹配是针对这个字段执行的
<field name="name" type="text_ci" indexed="true" stored="true"/>
问题是当我在 Solrj 的管理面板中执行我的查询时,一切都很好,我得到了我的结果,但是从我的 java 应用程序(使用 solrj)中,搜索似乎区分大小写,但我没有找到我可以指定的位置并告诉 solrj 我想执行不区分大小写的搜索
根据要求,我已经在此处添加了我的 solrj 代码
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();
你们有什么想法吗?我错过了什么吗?
谢谢
我最终创建了一个新类型
<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"/>
有了这个类型,我现在可以在 mysuperfield 上执行区分大小写的搜索