首页 > 解决方案 > Python中的Elasticsearch多字段查询请求

问题描述

我是 Elasticsearch 和 Python 的初学者,我在 Elasticsearch 中创建了一个包含一些数据的索引,我想用 python 对这些数据执行查询请求。这是我在 Kibana 的开发工具中创建的数据映射:

PUT /main-news-test-data
{
  "mappings": {
    "properties": {
      "content": {
        "type": "text"
      },
      "title": {
        "type": "text"
      },
      "lead": {
        "type": "text"
      },
      "agency": {
        "type": "keyword"
      },
      "date_created": {
        "type": "date"
      },
      "url": {
        "type": "keyword"
      },
      "image": {
        "type": "keyword"
      },
      "category": {
        "type": "keyword"
      },
      "id":{
        "type": "keyword"
      }
    }
  }
}

这是我的 Python 代码,在其中我们给它一个关键字和一个类别编号,它必须检查弹性数据的标题、潜在客户和内容字段以查找匹配的关键字,并检查输入的类别编号和数据类别编号并返回/打印出任何符合此条件的对象:

from elasticsearch import Elasticsearch
import json,requests

es = Elasticsearch(HOST="http://localhost", PORT=9200)
es = Elasticsearch()

def QueryMaker (keyword,category):
   response = es.search(index="main-news-test-data",body={"from":0,"size":5,"query":{"multi_match":{
       "content":keyword,"category":category,"title":keyword,"lead":keyword}}})
   return(response)

if __name__ == '__main__': 
    keyword = input('Enter Keyword: ')
    category = input('Enter Category: ')
    #startDate = input('Enter StartDate: ')
    #endDate = input('Enter EndDate: ')
    data = QueryMaker(keyword,category)
    print(data)

但是当我将数据提供给输入时收到此错误:

elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', '[multi_match] query does not support [content]')

我究竟做错了什么?

编辑:关键字必须包含在标题、线索和内容中,但不必与它们相同

标签: pythonelasticsearchkibana

解决方案


你的multi_match查询语法在这里是错误的,我也认为你需要这样的东西,查看更多https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query。 html

{
  "from":0,
  "size":5,
  "query": {
    "bool": {
      "should": [
        {
          "multi_match" : {
            "query":      keyword,
            "fields":     [ "content", "title","lead" ]
          }
        },
        {
          "multi_match" : {
            "query":      category,
            "fields":     [ "category" ]
          }
        }
      ]
    }
  }
}

推荐阅读