我的name
中有一个名为schema.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搜索中是完全正确的,然而我想构建查询,以便它不会返回任何内容,因为&#39; organic&#39; 仅匹配字段中可用的2个字中的1个。
更好的说法是:只有在字段中的所有标记都匹配时才返回结果。因此,如果字段中有两个单词(标记),我只匹配1(&#39;有机&#39; ,&#39;有机物&#39; , &#39; organ&#39; 等。)我不应该获得匹配,因为只搜索了50%的字段。
这在Solr有可能吗?如何构造查询?
答案 0 :(得分:0)
你可能正在使用StandardTokenizerFactory(或类似的东西),一个解决方案是使用KeywordTokenizerFactory并发出一个短语查询,然后只有完美匹配才有效。当然还记得你可能想要使用的其他过滤器(如LowerCaseFilterFactory等)。请注意:“有机存储”与您的文档不匹配
答案 1 :(得分:0)
由于时间限制,我不得不采用以下(hacky)解决方案。
我通过名为tc_i
的DynamicField字段将术语count添加到索引中。
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
现在在查询时我会计算条款并将其附加到查询中,因此q=name:(organic)
变为q=name:(organic) AND tc_i:(1)
并且这不会返回“有机商店”/“有机产品”的文档,显然是因为他们的tc_i
字段设置为2(两个字)。