我是Python和Elasticsearch的新手,我在Elasticsearch中创建了一个包含一些数据的索引,我想使用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":10000,"query":{
"bool": {
"should": [
{
"multi_match" : {
"query": keyword,
"fields": [ "content", "title","lead" ]
}
},
{
"multi_match" : {
"query": category,
"fields": [ "category" ]
}
}
]
}
}})
return(response)
def Mapper (category):
fhandle = open('categories.txt','r', encoding="utf8")
for line in fhandle:
line = line.rstrip()
items = line.split(';')
if f'"{category}"' in items:
category = items[0]
return(category)
if __name__ == '__main__':
keyword = input('Enter Keyword: ')
print(type(keyword))
category = input('Enter Category: ')
print(type(category))
#startDate = input('Enter StartDate: ')
#endDate = input('Enter EndDate: ')
mapCategory = Mapper(category)
if mapCategory is not None:
mapCategory = mapCategory.replace("%","")
data = QueryMaker(keyword,mapCategory)
print(data)
else:
data = QueryMaker(keyword,mapCategory)
print(data)
问题是,这个程序只在2个字段已满时返回匹配的数据,但我希望它在1个类似字段的类别为空时也返回数据。当关键字为空时,它与“”类似,且不返回任何内容;当类别为空时,我收到此错误:
elasticsearch.exceptions.RequestError: RequestError(400, 'x_content_parse_exception', '[multi_match] unknown token [VALUE_NULL] after [query]')
我做错了什么?如何修复搜索过滤器
添加带有索引数据、搜索查询和搜索结果的工作示例
根据您上面提到的注释,如果} 来实现
content
字段不包含keyword
,并且category
字段包含category
,则将对category
字段执行搜索查询。这可以通过使用^{索引数据:
搜索查询:
搜索结果:
相关问题 更多 >
编程相关推荐