【发布时间】:2015-07-21 16:56:27
【问题描述】:
我正在使用 SOLR 5.2 构建一个应用程序,我需要这种类型的匹配:
如果我存储了字段名称:“bla1 bla2”和名称:“bla2 something bla3” 当我查询类似名称的内容时:“something bla1 bla2 something bla3 bla4” 我需要它来匹配两个术语。
所以我最终要做的是定义这种类型的字段:
我使用关键字标记器进行索引。
我为 query 使用 Whitespace Tokenizer 和 Shingle 过滤器,所以我得到类似“bla tra kla zla cla”输出“bla tra”、“bla tra kla”、“bla tra kla zla”的内容.......
我已经尝试过分析和 shingling 工作正常,但问题是当我使用真实数据执行查询时,它似乎找不到匹配项。
<fieldType name="shingleparse" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigrams="false" outputUnigramsIfNoShingles="true" minShingleSize="2" maxShingleSize="5"/>
</analyzer>
</fieldType>
<field name="name" type="shingleparse" indexed="true" stored="true" required="true" multiValued="false" />
【问题讨论】:
-
Keyword Tokenizer 将整个文本字段视为单个标记。因此,当您为数据编制索引时,可以将其视为单个令牌
bla2 something bla3。 -
这正是它应该被处理的方式,因为例如,如果我查询像“bla2 something bla3 bla4 bla5”这样的东西,我会得到带状疱疹“bla2 something " , "bla2 something bla3", ... 它应该匹配,但由于某种原因它不匹配
-
那么在您的示例中,第一个 (
bla1 bla2) 匹配而不是第二个 (bla2 something bla3)?跨度> -
使用 Web 界面下的“分析”页面查看为什么 shingle 没有生成您认为应该匹配的匹配项..
-
问题是它生成的正是我想要的带状疱疹,但它与它们不匹配,这就是问题