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 建议最常见的结果而不返回整个短语的主要内容,如果未能解决你的问题,请参考以下文章

使用Solr从段落中进行短语匹配

如何在 Spring Data Solr 1.0 中搜索短语

在SOLR中搜索邻近另一个标记的短语

如何从一系列文本条目中提取常用/重要短语

如何使用 Elasticsearch java api 进行短语建议查询?

Solr查询解析器大全