Apache Solr布尔搜索100%匹配

时间:2017-07-12 06:33:13

标签: solr

我的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

的结果

我想知道我做错了什么,如果没有,有没有办法实现我想要的。

2 个答案:

答案 0 :(得分:1)

如果你想在该查询/字段中处理非英文文本,那么使用不同的分析,而不是做任何英语语言的东西。

text_en可能会产生一些干扰,并且可能会出现问题。正在删除,因此它符合您的查询。

答案 1 :(得分:1)

您正在使用fieldType text_en。它有一个过滤器Porter Stem Filter,它会阻止你的单词,并删除尾随的s

创建一个没有Porter Stem Filter

的新fieldType
<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并重新加载核心并重新索引数据

相关问题