我在弹性搜索中有一组记录 我想比较索引中存在的其他记录的1个特定记录(我在变量中将它与我一起)。
我想将每个字段的值与我拥有的记录中的值进行比较。
例如。 如果我有
{
"person" : [
{
"name" : "asd",
"awdawD" : "asdawd"
},
{
"name" : "adw ed",
"awdawD" : "asdawd"
},
{
"name" : "a wra",
"awdawD" : "asdawd"
},
{
"name" : "ca eyy",
"awdawD" : "asdawd"
}
]
}
我的记录是
[
{
"name" : "asd",
"awdawD" : "asdawd"
},
{
"name" : "s tr",
"awdawD" : " tjy"
}
]
我想将名称与名称进行比较,awdawD与awdawD进行比较并获得结果。
由于我有一个人数组,我是否必须为我所拥有的记录中的每个元素创建一个循环,以将其与弹性搜索中的记录进行比较?
如何在没有循环的弹性搜索中执行此操作?
单独比较每个名字和awdawD。
答案 0 :(得分:0)
我知道这可能不是您正在寻找的优雅解决方案(我认为不存在),但您总能做到这样的事情:
POST /test_index/_search
{
"query": {
"filtered": {
"filter": {
"or": {
"filters": [
{
"and": {
"filters": [
{
"term": {
"name": "asd"
}
},
{
"term": {
"awdawD": "asdawd"
}
}
]
}
},
{
"and": {
"filters": [
{
"term": {
"name": "s tr"
}
},
{
"term": {
"awdawD": " tjy"
}
}
]
}
}
]
}
}
}
}
}
或者
POST /test_index/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"name": "asd"
}
},
{
"match": {
"awdawD": "asdawd"
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"name": "s tr"
}
},
{
"match": {
"awdawD": " tjy"
}
}
]
}
}
]
}
}
}
这两个查询都只返回您的第一个文档(根据您的分析设置,一个或另一个可能更好)。
以下是我用来测试它的一些代码:
http://sense.qbox.io/gist/52de7f75e685486a63d18bd387cbb02d03cc6feb