[英]SOLR Case Insensitive Field search issue
我想要实现的是在test
后test
搜索,使我也可以使用不区分大小写的搜索来Test, TeSt, TesT,TEST
。 我该怎么办 ?
我在分配给test_field
schema.xml中具有这种textgen
类型
<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
和空结果。 (我做错了什么?)
{
"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配置的全部要点是以一种您可以只搜索没有通配符的单词的方式来标记文本。
如果仅在文本中搜索作品,则该作品应该可以使用,包括大小写混合。 如果不是,请检查您的字段是否实际映射到正确的类型以及是否已重新索引。 如果仍然感到困惑,Solr Admin UI会有一个分析屏幕,您可以在其中选择字段(或字段类型),并查看如何标记某些内容以及如何对其进行匹配。 您可以在那里尝试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.