如何解决如何使用Solr忽略停用词并仅使用剩余词来获取预期结果?
我有一个name
字段,定义如下:
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
</fieldType>
,我想根据以下条件搜索内容:
示例值:
test a value
test of solr
not a value
test me says value
因此,如果我确实搜索test value
,则应该只获得同时包含test
和values
的结果。而且,即使我执行test a value
,我仍然应该只得到相同的结果,因为停用词将被排除在外。但是,使用当前的设置,即使在solr查询中包含edismax
,我也可以获得所有结果。它通过带有这两个标记之一的记录进行记录。有人可以建议我对定义进行更新以获得预期的结果吗?而且,我是否按预期使用停用词?我不想在搜索过程中使用停用词。
我根据建议更新了定义,即使这样,结果对我也没有任何意义。
我有一个值what a term
。并且,还有其他值,例如what the term
; about a term
; about the term
; description test
; Name a Nothing
等。对what a term
的搜索将返回所有这些结果。而且,我也只有a
和the
的值。他们也得到返回结果。尽管对于what a term
,按照下面的屏幕截图,查询省略了停用词,但结果对我来说没有任何意义。
解决方法
您可以在搜索和索引期间忽略停用词。您不能在响应中忽略这些词。响应将按原样存储文本。存储用于搜索和响应的数据是不同的。搜索发生在索引数据上。在响应中,您将存储数据。
在字段类型定义中,您正在使用KeywordTokenizerFactory
。
KeywordTokenizerFactory
:习惯于不想创建文本标记的情况。该令牌生成器将整个文本字段视为单个令牌。
此后不再使用其他任何过滤器。
您可以使用StandardTokenizerFactory
代替KeywordTokenizerFactory
。
StandardTokenizerFactory
:此令牌生成器将文本字段拆分为令牌,将空格和标点符号视为分隔符。
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
</fieldType>
在分析页面上,我分析了上述字段的数据。
索引数据“测试一个值”并用“测试值”查询它,找到结果。在这里,您可以看到在为数据建立索引时,由于我们应用了stopwordfilterfactory
现在在索引以及分析页面中的查询时使用“测试值”。 应用过滤器并匹配结果后,它会跳过停用词“ a”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。