Solr部分搜索,奇怪的行为

丹尼斯·库兹涅佐夫

我有 Solr 部分搜索的奇怪行为。我使用这个过滤器:

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" />

我使用了不同的版本:Solr 4 和 Solr 5。我有下一个匹配结果:1) Word: Notifications

Not - YES
Noti - YES
Notif - YES
Notifi - NO
Notific - YES
Notifica - NO
Notificat - NO
Notificati - NO
Notificatio - NO
Notification - YES
Notifications - YES

2)两个词:A - 乘法和 B - 乘法(有误)

Mul: A - YES, B - YES
Mult: A - YES, B - YES
Multi: A - YES, B - YES
Multip: A - YES, B - YES
Multipl: A - YES, B - YES
Multipli: A - NO, B - YES
Multiplic: A - YES, B - YES
Multiplica: A - NO, B - YES
Multiplicat: A - NO, B - YES
Multiplicati: A - NO, B - YES
Multiplicatin: A - NO, B - YES
Multiplicatina: A - NO, B - NO
Multiplicatinat: A - NO, B - NO
Multiplicatinati: A - NO, B - NO
Multiplicatinatio: A - NO, B - NO
Multiplicatination: A - NO, B - YES
Multiplicatio: A - NO, B - NO
Multiplication: A - YES, B - YES (!!!)

为什么它以如此奇怪的方式工作?我该如何解决?

为什么“Notific”与“Notifications”匹配,而“Notific”、“Notifica”和“Notificatio”不匹配?为什么“乘法”匹配“乘法”,但不匹配“乘法”?为什么“乘法”与“乘法”匹配?它是如何工作的?

我运行下一个查询(我从调试器中获取它):

/select?q="multiplic"&fq=(ss_search_api_datasource%3A"entity%3Anode"+ss_media_bundle%3A"document")&fq=(ss_search_api_datasource%3A"entity%3Amedia"+ss_node_bundle%3A"task"+ss_node_bundle%3A"supply"+ss_node_bundle%3A"store"+ss_node_bundle%3A"news"+ss_node_bundle%3A"faq")&fq=index_id%3A"search"&fq=hash%3A"8qk984"&rows=3&fl=ss_search_api_id%2Cscore&wt=json&indent=true&defType=edismax&qf=tm_attachment_file%5E1+ts_media_name%5E8+ts_media_file_name%5E2+ts_node_title%5E13+ts_node_body%5E3&stopwords=true&lowercaseOperators=true

从 schema.xml 为 Solr 5 使用的字段定义:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <!-- 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="stopwords.txt"
            />
    <filter class="solr.WordDelimiterFilterFactory"
            protected="protwords.txt"
            generateWordParts="1"
            generateNumberParts="1"
            catenateWords="1"
            catenateNumbers="1"
            catenateAll="0"
            splitOnCaseChange="0"
            preserveOriginal="1"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" />
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            />
    <filter class="solr.WordDelimiterFilterFactory"
            protected="protwords.txt"
            generateWordParts="1"
            generateNumberParts="1"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="0"
            splitOnCaseChange="0"
            preserveOriginal="1"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="multiterm">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            />
    <filter class="solr.WordDelimiterFilterFactory"
            protected="protwords.txt"
            generateWordParts="1"
            generateNumberParts="1"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="0"
            splitOnCaseChange="1"
            preserveOriginal="1"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>
阿比吉特·巴谢蒂

我认为SnowballPorterFilterFactory正在制造问题。您可以通过从索引分析器中删除它来检查它。

您可以在此处找到有关它的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查询Solr时的奇怪行为

来自分类Dev

Solr 部分搜索

来自分类Dev

Solr。奇怪的方面搜索结果

来自分类Dev

Elasticsearch 地理搜索奇怪的行为

来自分类Dev

Solr搜索部分句子

来自分类Dev

SQL Server中全文搜索的奇怪行为

来自分类Dev

PHP关联数组_搜索奇怪的行为

来自分类Dev

Solr邻近搜索,部分单词匹配

来自分类Dev

Solr邻近搜索,部分单词匹配

来自分类Dev

Solr不适用于部分搜索

来自分类Dev

Ruby中奇怪的二进制搜索行为

来自分类Dev

HTML部分在Firefox中时的奇怪行为

来自分类Dev

奇怪的行为

来自分类Dev

奇怪的行为

来自分类Dev

奇怪的行为

来自分类Dev

预测行为的奇怪行为

来自分类Dev

由fq进行的solr搜索与部分字符串匹配

来自分类Dev

Solr搜索词的一部分

来自分类Dev

单词(字符串)中的solr lucene空间搜索比使用*的搜索分为4部分

来自分类Dev

Typeahead的奇怪行为-搜索字符串和结果一起返回

来自分类Dev

在表视图中删除搜索结果对象后出现奇怪的行为

来自分类Dev

使用 Javascript 从 Google 搜索结果页面提取 url 时的奇怪行为

来自分类Dev

房间实时数据,视图模型。按名称搜索。奇怪的过滤行为

来自分类Dev

Solr文本字段和字符串字段-不同的搜索行为

来自分类Dev

作为willActivate的一部分更新接口时的奇怪行为

来自分类Dev

奇怪的addEventListener行为

来自分类Dev

MATLAB subs():奇怪的行为

来自分类Dev

右移位的奇怪行为

来自分类Dev

奇怪的约束行为