我使用solr与品牌进行简短查询。我想要平等的比赛,但要明白在Lucene中是不可能的。 我为测试尝试了一些硬编码查询
myBrand:2\+2 and myBrand:\+
我得到2:2,似乎和条件不起作用或不是我期待的方式?
另外,我试试fq
myBrand:2\+2 with a fq of myBrand:\+
现在,根本没有结果。
我使用Solr 5并在Solr Web界面中进行所有测试。 是否有一些方法可以获得一些短品牌,绰号等的最佳匹配,当我不需要太多的eristics并希望强大的平等匹配?或者无论如何,我必须在执行solr查询后在我自己的代码中过滤结果?
已更新
架构中的更改解决了我的问题。
现在它正在为查询2+2
工作,就像魅力一样。
<fieldType name="text_general" class="solr.TextField" multiValued="true" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PatternTokenizerFactory" pattern="\s*"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="\s*"/>
</analyzer>
</fieldType>
答案 0 :(得分:2)
平等比赛并非不可能。您只需使用保留精确值的字段类型,例如StrField或带有KeywordTokenizer的TextField(如果您想使其不区分大小写)。
匹配将是field:"Exact value"
或任何常规查询语法。 Solr / Lucene之所以没有做到这样的话,那就是&#34;确切的&#34; match是示例中的常规TextField定义将文本分成单独的标记。
对于过滤器,您通常需要精确值(对于构面和fq
,因此您可以精确地过滤结果),因此这不是Lucene限制,而是由字段类型引入的内容你正在与之合作。
解决方案可能是在许多字段中使用相同的内容(一个用于搜索常规文本查询),另一个用于过滤和分面。使用copyField
将相同的值从同一源字段中的多个字段中获取。