我想要做的只是在没有“bar”的情况下获得“foo”的结果。 我试着在这个link之后使用正则表达式:name:/ foo(?!\ s + bar)/但是我没有得到任何结果。 还有另一种方法吗?或者我的正则表达式错了吗?
编辑:MatsLindh评论有效,但我失去了所有结果,我在一起有foo和foo bar(例如“foo ababa foo bar”)。我想过滤掉只有foo后跟bar的结果,而不会出现任何其他foo。
答案 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"
我不认为这是有充分记录的,所以我不得不做一些研究和反复试验。