Solr 建议最常见的结果而不返回整个短语
Posted
技术标签:
【中文标题】Solr 建议最常见的结果而不返回整个短语【英文标题】:Solr suggest most common result without returning entire phrase 【发布时间】:2019-01-10 17:11:11 【问题描述】:我们正在寻求实施用于搜索 Solr 核心的建议下拉菜单。 我们已经实现了基本搜索,但没有实施建议,因此设置了核心。我正在尝试详细说明我的问题,但不会过于复杂。
如果他们正在搜索单个词,我们希望建议最常见的单个匹配词。
如果他们搜索多个单词,我们希望建议最常见的组合短语。如果组合词组不存在,我们希望从词组中的一个词获得最常见的结果。
我试图为建议实施一个解决方案,而不必创建另一个核心,我必须在其中解析单词、短语和计数。
我研究了拼写检查器并建议了组件。
我对建议的问题是它只返回整个字段。我们希望它只返回与开始输入一样多的单词。
我遇到的拼写检查问题是,如果单词拼写正确,它不会返回正确的结果(有道理,它是一个拼写检查)。而且,如果我们对多个单词进行拼写检查,它们会在结果中被分开。如果他们搜索了多个单词并且存在匹配项,我们希望这两个单词按相同的顺序返回,并且我们希望用户使用正确的拼写。
我们正在搜索的核心中的文档场景:
title: 5ft transparent tape,
title: 5ft transparent dressing,
title: onsite training,
title: tape dispenser,
title: countertop tape dispenser,
title: 3ft tape measure,
title: 5ft tape measure,
title: 10ft tape measure,
title: tape media
仅在 3 个字符后开始建议。只想要 1 个结果。
search: "tra"
returns: transparent
^^ 思路:返回最常见的匹配单字,“transparent”出现的次数比“training”多。
search: "tape me"
returns: "tape measure"
^^ 思路:返回最常见的两个匹配词,“tape measure”出现的次数多于“tape media”。
search: "cassette tape"
returns: "tape"
^^ 想法:“cassette tape”不存在,“cassette”也不存在,所以它返回最常见的单词“tape”。
Nice to have, but not required:
search: "tape " (with space)
returns: "tape measure"
^^ 想法:它知道空格意味着他们将要输入另一个单词,并返回以第一个单词开头的最常见的两个单词,“tape measure”比“tape media”和“tape dispenser”出现的次数更多。
关于如何通过使用现有核心来实现这一点的任何想法?我已经想到了一种使用新核心的方法,通过对数据进行切片和切块,并创建一个建议组件,但我想使用我们拥有的核心。是否可以使用自定义令牌过滤器?自定义令牌过滤器目前在我头上,但如果可能的话,我会试一试。
感谢您的帮助!
【问题讨论】:
【参考方案1】:我必须找到正确的过滤器。 ShingleFilterFactory - 此过滤器从令牌流构造带状疱疹,它们是令牌 n-gram。它将一系列令牌组合成一个令牌。
https://lucene.apache.org/solr/guide/7_0/filter-descriptions.html#shingle-filter
<fieldType name="spellcheck_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="4" outputUnigrams="false"/>
</analyzer>
</fieldType>
上面的分析器示例:
在:“成为,或不成为。”
要过滤的分词器:“To”(1)、“be”(2)、“or”(3)、“not”(4)、“to”(5)、“be”(6)
输出:“成为”(1)、“成为或不是”(1)、“成为或不是”(1)、“成为或不是”(2)、“成为或不是”(2)、“成为与否”(2), “或不是”(3), “或不是”(3), “或不是”(3), “不是”(4), “不是”( 4), “成为”(5)
【讨论】:
【参考方案2】:看看 AnalyzingInfix 建议器 https://lucidworks.com/2015/03/04/solr-suggester/
【讨论】:
以上是关于Solr 建议最常见的结果而不返回整个短语的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Data Solr 1.0 中搜索短语