python - 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]')
我究竟做错了什么?
编辑:关键字必须包含在标题、线索和内容中,但不必与它们相同
解决方案
你的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" ]
}
}
]
}
}
}
推荐阅读
- reactjs - 组件在获取其值之前被渲染
- android - 为什么 Google Play 会阻止在没有 GPS 的平板电脑上安装应用程序?
- xamarin - 有没有办法可以将以前的最小和最大分数设置为滑块上的标记?
- html - 电子邮件模板中的反向边界半径
- vb.net - 如何在 VB.Net 的 Word 文档末尾设置光标?
- vue.js - Getuikit 3 可排序元素移动未触发
- sql - GTFS - 特定停止的所有服务
- python - 如何在熊猫数据框中插入列名?
- python - 有没有更优雅的方式来引用脚本的当前目录?
- python - 没有输出,即使使用 `py.test -s`