我的数据如下所示:
[
{
“name”: "/key1=value1/key2=value2/key3=value3"
},
{
“name”: "/key1=value1"
},
{
“name”: "/key1=value1/key4=value4"
}
]
我正试图形成一个弹性搜索查询,使得:
如果我输入的是:
示例1:
/key3=value3/key1=value1/key2=value2
在结果中给我以下名字:
[
{
“name”: "/key1=value1/key2=value2/key3=value3"
}
]
因此,我的输入查询可以被视为与-> key3=value3 AND key1=value1 AND key2=value2
之类的AND操作,因此,如果所有三个名称都以任何名称出现,则该名称将出现在响应中。
示例2:
/key4=value4
在结果中给我以下名字:
[
{
“name”: "/key1=value1/key4=value4"
}
]
示例3:
/key2=value2/key1=value1
在结果中给我以下名字:
[
{
“name”: "/key1=value1/key2=value2/key3=value3"
}
]
因为此名称仅同时存在key2 = value2和key1 = value1。
示例4:
/key1=value1
在结果中给我以下名字:
[
{
“name”: "/key1=value1/key2=value2/key3=value3"
},
{
“name”: "/key1=value1"
},
{
“name”: "/key1=value1/key4=value4"
}
]
因为三个名称中的所有key1 = value1都存在。
我认为应该是这样的方法:
将输入表达式拆分为斜杠(/)
例如:考虑示例1:
/key3=value3/key1=value1/key2=value2
形成一个列表,例如:[key3=value3,key1=value1,key2=value2]
然后尝试检查列表中的每个项目是否应该存在于名称字符串中。但我不知道在这种情况下如何编写查询。
我正在使用elasticsearch_dsl’s
python库的Q
函数来构成查询。
我正在尝试如下操作:
https://www.elastic.co/guide/en/elasticsearch/guide/2.x/match-multi-word.html#match-improving-precision。 (似乎可以达到我的目的)
如果输入为: / key3 = value3 / key1 = value1 / key2 = value2
{
"query": {
"match": {
"name": {
"query": " /key3=value3 /key1=value1/ key2=value2",
"operator": "and"
}
}
}
}
但是我不知道如何使用'Q'编写相同的内容,或者有没有更好的方法来实现上述查询?