在Solr中查询多值字段中的特定索引值

5

以下是我的Solr文档中的多字段(仅为示例)。

"type": [
    "Single",
    "Series",
    "Other association"
],
"name": [
    "Name associated with first type",
    "Name associated with second type",
    "Name associated with third type"
]

我可以使用以下查询语句来查询两个字段:

name:"Name associated with third type" AND type:"Series"

但是我需要查询name的值,并且还要匹配同一数组索引中的type值。所以上面的示例不应该命中,因为“与第三种类型相关联的名称”是第三个name,而“Series”type中的第二个。

应该产生命中的查询是这样的,因为两个值都在同一个数组索引中。

name:"Name associated with second type" AND type:"Series"

但是这匹配了所有的内容。我希望这已经被妥善解释了。我甚至不知道这是否可能。
1个回答

4
不可能通过相同索引的两个多值字段进行匹配。您需要获取所有匹配的文档,并在客户端处理它们。
但是,如果您总是拥有typename的完整值,则可以修改模式并使其按以下方式工作。
定义一个名为type_names的新字段,它是一个多值字符串字段。修改您的索引器以设置该字段中的值。
type_names: [Single#Name associated with first type,
             Series#Name associated with second type,
             Other association#Name associated with third type]

我正在使用#,但您可以使用适合自己的任何分隔符字符串。

(如果您希望进行大小写不敏感匹配并且将查询值转换为小写,请将索引中的所有内容都转换为小写。)

然后像这样查询此字段:

type_names:(Series#Name associated with second type)

如果您知道type的完整值,但只知道name中的一个单词(比如说second),那么您可以使用正则表达式匹配:
type_names:/Series#.*second.*/

我假设你可以使用一个复制字段,但是如何设置自定义索引逻辑来连接数组索引? - Dinerdo

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