如果我搜索q = searchtext:* xxx *,它可以很好地工作,但是如果关键字有“ - ”(q = searchtext:* xxx-xx *),那么它不会给出结果。在solr查询中用特殊字符搜索通配符
复制searchtext字段中的所有字段,并在其上具有text_general字段类型。
模式:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ReversedWildcardFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
<filter class="solr.PorterStemFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
谷歌搜索好几个小时也没有找到一个解决方案。
感谢有人能帮忙。
编辑:更改关键字标记生成器为标准
您正在使用关键字标记器,它将整个字段按原样处理(不会将文本分解为更小的标记)。那么q = searchtext:xxx应该不起作用,并且q = searchtext:xxx-xx将起作用,如果您有像xxx-xx这样的文本。你能证实你的模式是正确的吗? – skm
实际上使用标准Tokenizer,试过关键字Tokenizer,但它不能与搜索文本:xxxx,所以我把它回到标准。 –
使用标准标记器,文本xxx-xx将分解为标记xxx和xx(打开 - )。然后你可以在xxx,xx上执行搜索。如果你想查询xxx-xx,然后在你的中,你可以使用标准Tokenizer本身,但不能使用Keyword Tokenizer,因为它会将xxx-xx视为单个字段,而当索引将它分解为xxx和xx 。参考检查https://wiki.apache。org/solr/AnalyzersTokenizersTokenFilters –
skm