我在SOLR
命名语言中有一个字符串multiValued字段,我希望查询只返回完全匹配,其中查询中的所有语言都在multiValued字段中。
例如,假设我有三个文件:
"languages": [
"English",
"Russian",
"Swedish"
],
"languages": [
"English",
"Japanese",
"Russian",
"Spanish",
"Thai"
],
"languages": [
"English",
"Spanish"
],
如果我要查询英语和俄语,我应该只返回前两个文件。 以下是使用的查询的一些示例:
Q =语言:"英语"和语言:"俄语"
q =语言:("英语"和"俄语")
Q =语言:("英语""俄罗斯&#34)
q =语言:("俄语""英语")
在所有情况下,这些都会返回所有英语或俄语的记录。我可能会忽略一些显而易见的事情,但我已经四处寻找并没有发现任何解释这种行为
答案 0 :(得分:2)
确保以大写字母书写AND
。查询将如下所示:
Q =语言:"英语"和语言:"俄语"
您还可以使用+
或-
来否定部分查询。例如,如果您想要一个具有"英语"作为一种语言,但不是"俄语",你会使用这样的查询:
Q = +语言:"英语" AND -languages:"俄语"
答案 1 :(得分:0)
请尝试将&defType=lucene
添加到您使用的网址。
答案 2 :(得分:0)
虽然这可能是一个迟到的答案,但它仍然是一个很好的迟到答案:
首先,"和"必须是大写的" AND"。
其次,(" terma"," termb")和(" terma"" termb")应该是一回事。 ","的含义或" "取决于您在schema.xml中选择的默认运算符
第三,如果你在搜索字符串中正确指定了AND,我认为结果可能是terma或termb。
第四,如果你真的想要......或者...结果,你可以这样指定:语言:(" terma" OR" termb")点。
答案 3 :(得分:0)
以上答案很好,但如果您提到" AND"或"或"在你的stopwords.txt文件中,然后solr将删除" AND"和"或"来自您的查询。由于数据本身存在大量的AND和OR,我们在项目中也做了同样的事情。
在这种情况下,您可以使用&& (用于AND)和|| (对于OR)作为查询中的条件参数。
示例:q =语言:"英语" &安培;&安培; "俄罗斯"