【发布时间】:2017-02-09 19:40:24
【问题描述】:
我想要实现的是,当我搜索test 时,我也可以通过不区分大小写的搜索将Test, TeSt, TesT,TEST 带给我。
我该怎么办?
我的 schema.xml 中有这个 textgen 类型,分配给 test_field
<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="select">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这是我希望通过查询获得的结果。
{
"responseHeader":{
"status":0,
"QTime":2,
"params":{
"q":"test_field:*",
"indent":"true",
"wt":"json"}},
"response":{"numFound":5,"start":0,"docs":[
{
"id":"change.me",
"test_field":["test"],
"_version_":1546932094148542464},
{
"id":"change.me1",
"test_field":["tesT"],
"_version_":1546932100203020288},
{
"id":"change.me2",
"test_field":["TesT"],
"_version_":1546932103122255872},
{
"id":"change.me3",
"test_field":["TEsT"],
"_version_":1546932107768496128},
{
"id":"change.me4",
"test_field":["TEST"],
"_version_":1546932111283322880}]
}}
当我使用此查询时,它不会给出任何结果,因为它区分大小写,即使它具有过滤器 LowerCaseFilterFactory
http://localhost:8983/solr/test-data/select?q=test_field:*test*&wt=json&indent=true
AND 空结果。 (我做错了什么?)
{
"responseHeader":{
"status":0,
"QTime":2,
"params":{
"q":"test_field:*test*",
"indent":"true",
"wt":"json"}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"change.me",
"test_field":["test"],
"_version_":1546932094148542464}]
}}
【问题讨论】:
-
添加过滤器后需要重新索引文档。所以请在重新索引文档后检查查询。
-
我创建了一个新架构并且它工作正常,我认为我的旧 solr 架构中有些东西搞砸了。
标签: search solr case-insensitive