使用每个字段的值集搜索弹性搜索中的记录。

时间:2015-10-15 10:01:51

标签: elasticsearch elastica

我在弹性搜索中有一组记录 我想比较索引中存在的其他记录的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。

1 个答案:

答案 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