gpt4 book ai didi

java - Solr 通配符搜索不正确的结果

转载 作者:行者123 更新时间:2023-12-05 00:54:30 25 4
gpt4 key购买 nike

当我进行通配符查询时,我得到了一些意想不到的结果。我正在使用 solr 6.6.0。 solr ui 中的 edismax 处理程序。以下查询在没有通配符的情况下按预期返回结果 - firstNames:Jame​​s,但是当我添加通配符时没有找到结果。 without wildcard with wildcard对于 firstNames 字段,我使用带有默认标记器和过滤器的默认 fieldType text_en。当我对 firstNames:Stephen 和 firstNames:Stephen* 运行完全相同的查询时,我在通配符和非通配符搜索中都得到了结果。下面是我在 schema.xml 中的字段 xml:

  <field name="firstNames" type="text_en" multiValued="true" indexed="true" stored="true"/>
  <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>

最佳答案

当您进行通配符查询时,分析链不会被调用(嗯,这是一个小谎言 - 它是,但只有 MultiTermAware 的组件 - 这通常意味着 LowercaseFilter 是唯一仍然处于 Activity 状态的东西)。

由于您有一个词干过滤器和所有格过滤器,因此 James 上的结尾 s 被删除。由于这只发生在索引时间(请记住,当您使用通配符时,通常会在查询时跳过分析链), token jame 存储在索引中。

当您进行查询 firstNames:Jame​​s* 时,您要求 Solr“查找包含以 James 开头的标记的任何文档。因为存储的是标记jame,没有匹配 james 的标记。

当您改用 Stephen 尝试此操作时,词干过滤器或所有格过滤器都不会删除单词的结尾,因此 Stephen* 会查找以 stephen 开头的任何标记,并且由于该 token 存在(没有任何更改),因此返回匹配项。

解决方案取决于您的用例;不需要在名称字段上使用词干或所有格过滤器,因为这对名称没有意义(相反,您可以应用自己的逻辑来匹配类似的名称)。另一种选择是使用 ngramfilter 代替,有效地为 token 的每个前缀和中缀版本生成一个 token (fooffooo, o).

关于java - Solr 通配符搜索不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66176030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com