0

nameschema.xml. 查询q=name:(organic)返回以下文档:

<doc>
    <str name="id">ontology.category.1483</str>
    <str name="name">Organic Products</str>
</doc>
<doc>
    <str name="id">ontology.keyword.4896</str>
    <str name="name">Organic Stores</str>
</doc> 

这在普通的 Solr 搜索中是完全正确的,但是我想构建查询以便它不返回任何内容,因为“有机”仅匹配该字段中可用的 2 个单词中的 1 个。

一个更好的说法可能是:仅当字段中的所有标记都匹配时才返回结果。因此,如果一个字段中有两个单词(标记)并且我只匹配 1('organic''organics''organ'等),我不应该得到匹配,因为只有 50% 的字段被搜索过.

这在 Solr 中可行吗?如何构建查询?

4

2 回答 2

0

您可能正在使用 StandardTokenizerFactory (或类似的东西),一种解决方案是使用 KeywordTokenizerFactory 并发出短语查询,然后只有完美匹配才会起作用。当然请记住您可能想要使用的其他过滤器(例如 LowerCaseFilterFactory 等)。请注意:“商店有机”也不会与您的文档匹配

于 2012-05-09T08:47:06.887 回答
0

由于时间限制,我不得不求助于以下(hacky)解决方案。

我通过名为 的 DynamicField 字段将术语计数添加到索引中tc_i

<dynamicField name="*_i" type="int" indexed="true" stored="true"/>

现在在查询时我计算术语并将其附加到查询中,所以q=name:(organic)变成了q=name:(organic) AND tc_i:(1),这显然不会返回“有机商店”/“有机产品”的文档,因为它们的tc_i字段设置为 2(两个词)。

于 2012-05-09T22:23:59.413 回答