如何在solr中搜索未跟随另一个特定单词的特定单词?

时间:2018-02-08 10:12:53

标签: regex solr

我想要做的只是在没有“bar”的情况下获得“foo”的结果。 我试着在这个link之后使用正则表达式:name:/ foo(?!\ s + bar)/但是我没有得到任何结果。 还有另一种方法吗?或者我的正则表达式错了吗?

编辑:MatsLindh评论有效,但我失去了所有结果,我在一起有foo和foo bar(例如“foo ababa foo bar”)。我想过滤掉只有foo后跟bar的结果,而不会出现任何其他foo。

2 个答案:

答案 0 :(得分:0)

您可以使用此功能过滤结果

q=*:*&fq=-name:"foo bar"

请注意,您不应为归档name执行tokenizer或仅为此归档使用solr.StrField

如果您想为此字段执行标记生成器,则可以引用copyFiled

<field name="copyName" type="string" indexed="true" stored="false"/>
<fieldType name="string" class="solr.StrField"/>
<copyField source="name" dest="copyName" />

答案 1 :(得分:0)

原来正确的方法是使用ComplexPhraseQueryParser: {!complexphrase df=name}"foo -bar"

我不认为这是有充分记录的,所以我不得不做一些研究和反复试验。