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

5

我在 SOLR 中有一个名为 languages 的字符串多值域,我希望查询只返回所有查询语句中的语言都在该多值域中的精确匹配。

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

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

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

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

如果我要查询“英语”和“俄语”,那么我只应该返回前两个文档。以下是使用的一些查询示例:
q=languages:"English" and languages:"Russian" q=languages:("English" and "Russian") q=languages:("English","Russian") q=languages:("Russian" "English")
在所有情况下,这些查询都会返回具有“英语”或“俄语”的所有记录。也许我忽略了一些显而易见的东西,但我搜索了一圈,没有找到任何解释这种行为的内容。

你的默认请求处理程序配置如何?你可以在solrconfig.xml文件中找到它。标签名为<requestHandler>,带有default=true属性。 - cheffe
4个回答

2
请确保将AND大写。查询应如下所示:

q=languages:"English" AND languages:"Russian"

您还可以使用+-来否定查询的一部分。例如,如果您想要一个以“英语”为语言但不包括“俄语”的文档,则可以使用以下查询:

q=+languages:"English" AND -languages:"Russian"


0

虽然这可能是一个晚回答,但它仍然是一个好的晚回答:

首先,“and”必须大写为“AND”。
其次,“terma”,“termb”和“terma”“termb”应该是同一件事。","或" "的含义取决于您在schema.xml中指定的默认运算符。
第三,如果您正确地在搜索字符串中指定了AND,则不可能出现结果既是terma又是termb。
第四,如果您真的想要要么...要么...的结果,可以像这样指定:languages:(“terma”OR“termb”)


0

以上的回答都很好,但是如果你在你的stopwords.txt文件中提到了"AND"或"OR",那么solr将会从你的查询中删除"AND"和"OR"。由于数据本身有很多AND和OR,我们在项目中也做了同样的事情。

在这种情况下,您可以在查询中使用&&(表示AND)和||(表示OR)作为条件参数。

例如:q=languages:"English" && "Russian"


0
请尝试在您使用的URL中添加&defType=lucene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接