如何创建ElasticSearch查询以获取此信息?

时间:2019-09-21 20:07:13

标签: elasticsearch

我需要通过Python模块查询ElasticSearch索引,而我对ElasticSearch并不熟悉。假设我的索引存储成对的人以及有关每对人的一些信息。我想知道如何创建一个ElasticSearch查询,该查询将在下面提供给我。基本上,我想从其中some info命名为person1John Whiteteacher命名为person2的对中获取Sarah Black字段值和doctor。我想要完全匹配,而不是模糊匹配。

"person1": {
    "name": "John White",
    "job": "teacher"

}
"person2": {
    "name": "Sarah Black",
    "job": "doctor"
}
"some info": "blah blah"

我在下面的查询中尝试过,但是它给了我一对,其中只有一对与我要的信息匹配,另一个人的姓名/职务可能非常不同。如何在双方的信息都匹配的情况下获得完全匹配?

  "query": {
    "bool" : {
        "must": {
            "bool" : {
                "should": [
                    { "match": { "person1.name": "John White" }},
                    { "match": { "person1.job": "teacher" }}
                  ],
                "should": [
                    { "match": { "person2.name": "Sarah Black" }},
                    { "match": { "person2.job": "doctor" }}
                  ]
            }
        }
    }
  }

1 个答案:

答案 0 :(得分:1)

尝试这样

映射您的索引

{
  "settings": {
    "analysis": {
      "normalizer": {
        "lc_normalizer": {
          "type": "custom",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "person1": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "exact": {
                "type": "keyword",
                "normalizer": "lc_normalizer"
              }
            }
          },
          "job": {
            "type": "keyword"
          }
        }
      },
      "person2": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "exact": {
                "type": "keyword",
                "normalizer": "lc_normalizer"
              }
            }
          },
          "job": {
            "type": "keyword"
          }
        }
      },
      "some_info": {
        "type": "text"
      }
    }
  }
}

查询

{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "person1.name.exact": "john white"
        }},
        {"match": {
          "person2.name.exact": "Sarah Black"
        }},
        { "term": { "person1.job": "teacher"}},
        { "term": { "person2.job": "doctor"}}
      ]
    }
  }
}

希望有帮助

相关问题