我的apache solr中有2个文档,其中包含以下字段值
custom_value: haris mehmood
custom_value: hari mehmood
我正在尝试进行布尔搜索并使用dismax,我的查询为+haris
,我执行以下操作:
defType=dismax & mm=100% & ps=0 & q=+haris & wt=json
P.S:我在查询字符串中添加了空格以便更好地理解
我只想要一个响应的结果应该是第一个,即haris mehmood
,而不是hari mehmood
我想知道我做错了什么,如果没有,有没有办法实现我想要的。
答案 0 :(得分:1)
如果你想在该查询/字段中处理非英文文本,那么使用不同的分析,而不是做任何英语语言的东西。
text_en可能会产生一些干扰,并且可能会出现问题。正在删除,因此它符合您的查询。
答案 1 :(得分:1)
您正在使用fieldType text_en
。它有一个过滤器Porter Stem Filter
,它会阻止你的单词,并删除尾随的s
。
创建一个没有Porter Stem Filter
<fieldType name="text_simple" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
</analyzer>
</fieldType>
将fieldType更改为text_simple
并重新加载核心并重新索引数据