【问题标题】:Bool and query on Elasticsearch 6.5.3Elasticsearch 6.5.3 上的布尔和查询
【发布时间】:2019-01-21 04:44:43
【问题描述】:

我正在开发 ElasticSearch 6.5.3 和 .请在下面找到我的代码:

from elasticsearch import Elasticsearch, helpers

def search(es_object, index_name, request):
    toto = es_object.search(index=index_name, body=request)
    return toto

fuzziness = 1
request1 = {
    "query": {
        "match" : {
            "Family_name" : {
                "query" : family_names,
                "fuzziness": fuzziness,
            }
        }
    },
    "size" : size
}

request2 = {
    "query": {
        "match" : {
            "First_name" : {
                "query" : first_names,
                "fuzziness": fuzziness,
            }
        }
    },
    "size" : size
}

result1 = search(es,ELASTICSEARCH_INDEX_NAME,request1)
result2 = search(es,ELASTICSEARCH_INDEX_NAME,request2)

我想对名字和姓氏进行布尔模糊查询。请问我该怎么做?

我尝试了以下方法:

request = {
    "bool": {
        "must": [
            {
                "query": {
                    "match" : {
                        "First_name" : {
                            "query" : family_name,
                            "fuzziness": fuzziness,
                        }
                    }
                },
                "query": {
                    "match" : {
                        "Prénom" : {
                            "query" : firstname,
                            "fuzziness": fuzziness,
                        }
                    }
                }
            }
        ]
    }
}


result = search(es,ELASTICSEARCH_INDEX_NAME,request)

我收到以下错误,表示我的查询存在问题。看来我不能同时结合两个模糊的匹配查询

RequestError: RequestError(400, 'parsing_exception', 'Unknown key 
for a START_OBJECT in [bool].')

【问题讨论】:

  • 你只需要从两个中进行布尔查询
  • 我在上面写了但它不起作用?

标签: python-3.x elasticsearch


【解决方案1】:

您的查询有点错误,您需要像这样修复它:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "First_name": {
              "query": "family_name",
              "fuzziness": fuzziness
            }
          }
        },
        {
          "match": {
            "Prénom": {
              "query": "firstname",
              "fuzziness": fuzziness
            }
          }
        }
      ]
    }
  }
}

原因是,这个布尔查询数组已经知道它是一个查询对象,所以你不需要再次指定它

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2016-08-26
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多