匹配SOLR中multiValued字段的查询中的所有值

时间:2014-12-18 04:56:53

标签: solr

我在SOLR命名语言中有一个字符串multiValued字段,我希望查询只返回完全匹配,其中查询中的所有语言都在multiValued字段中。

例如,假设我有三个文件:

 "languages": [
          "English",
          "Russian",
          "Swedish"
        ],

"languages": [
          "English",
          "Japanese",
          "Russian",
          "Spanish",
          "Thai"
        ],

"languages": [
          "English",
          "Spanish"
        ],

如果我要查询英语俄语,我应该只返回前两个文件。 以下是使用的查询的一些示例:

  

Q =语言:"英语"和语言:"俄语"

     

q =语言:("英语"和"俄语")

     

Q =语言:("英语""俄罗斯&#34)

     

q =语言:("俄语""英语")

在所有情况下,这些都会返回所有英语俄语的记录。我可能会忽略一些显而易见的事情,但我已经四处寻找并没有发现任何解释这种行为

4 个答案:

答案 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 =语言:"英语" &安培;&安培; "俄罗斯"