Elasticsearch Percolate 查询未命中
Elasticsearch Percolate Queries doesnt hit
我尝试使用 python 从 Elastic 7.3 Percolate 文档 运行 中获取示例,但我的文档没有遇到任何查询。
这里是 link 查看示例页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html
我使用了python pip package elasticsearch。
我的结果是:
{'took': 1, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 0, 'relation': 'eq'}, 'max_score': None, 'hits': []}}
索引包含一个文档(渗透查询):
curl -X GET "localhost:9200/inverse-index/_search"
{"took":112,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":1,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"inverse-index","_type":"_doc","_id":"1","_score":1.0,"_source":{"query":{"match":{"message":"bonsai tree"}}}}]}}
提前谢谢你(见下面我的代码)
from elasticsearch import Elasticsearch
elasticHost = "localhost"
elasticPort = "9200"
elasticIndex = "inverse-index"
if __name__ == "__main__":
es = Elasticsearch(elasticHost + ":" + elasticPort)
if es.indices.exists(elasticIndex):
print("deleting '%s' index..." % elasticIndex)
res = es.indices.delete(index=elasticIndex)
print(" response: '%s'" % res)
request_body = {
"mappings": {
"properties": {
"message": {
"type": "text"
},
"query": {
"type": "percolator"
}
}
}
}
print("creating '%s' index..." % elasticIndex)
print(" response: '%s'" % (es.indices.create(index=elasticIndex, body=request_body)))
res = es.create(index=elasticIndex, id=1, body={
"query" : {
"match" : {
"message" : "bonsai tree"
}
}
})
doc = {
"query": {
"percolate": {
"field": "query",
"document": {
"message": "A new bonsai tree in the office"
}
}
}
}
res = es.search(index=elasticIndex, body=doc)
print(str(res))
日志信息:
send: b'GET /inverse-index/_search HTTP/1.1\r\nHost: localhost:9200\r\nAccept-Encoding: identity\r\nContent-Length: 78\r\nconnection: keep-alive\r\ncontent-type: application/json\r\n\r\n'
send: b'{"query":{"percolate":{"field":"query","document":{"message":"bonsai tree"}}}}'
DEBUG:urllib3.connectionpool:http://localhost:9200 "GET /inverse-index/_search HTTP/1.1" 200 160
INFO:elasticsearch:GET http://localhost:9200/inverse-index/_search [status:200 request:0.008s]
DEBUG:elasticsearch:> {"query":{"percolate":{"field":"query","document":{"message":"bonsai tree"}}}}
DEBUG:elasticsearch:< {"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}
reply: 'HTTP/1.1 200 OK\r\n'
示例页面的代码与 bash curl 命令配合使用效果很好。问题可能出在 python 站点上。
案件结案。
弹性索引是在后台创建的,我只需要等待几秒钟。不知道是否有选项可以证明,如果创建已经完成,但它对我有用。
我尝试使用 python 从 Elastic 7.3 Percolate 文档 运行 中获取示例,但我的文档没有遇到任何查询。 这里是 link 查看示例页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html
我使用了python pip package elasticsearch。 我的结果是:
{'took': 1, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 0, 'relation': 'eq'}, 'max_score': None, 'hits': []}}
索引包含一个文档(渗透查询): curl -X GET "localhost:9200/inverse-index/_search"
{"took":112,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":1,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"inverse-index","_type":"_doc","_id":"1","_score":1.0,"_source":{"query":{"match":{"message":"bonsai tree"}}}}]}}
提前谢谢你(见下面我的代码)
from elasticsearch import Elasticsearch
elasticHost = "localhost"
elasticPort = "9200"
elasticIndex = "inverse-index"
if __name__ == "__main__":
es = Elasticsearch(elasticHost + ":" + elasticPort)
if es.indices.exists(elasticIndex):
print("deleting '%s' index..." % elasticIndex)
res = es.indices.delete(index=elasticIndex)
print(" response: '%s'" % res)
request_body = {
"mappings": {
"properties": {
"message": {
"type": "text"
},
"query": {
"type": "percolator"
}
}
}
}
print("creating '%s' index..." % elasticIndex)
print(" response: '%s'" % (es.indices.create(index=elasticIndex, body=request_body)))
res = es.create(index=elasticIndex, id=1, body={
"query" : {
"match" : {
"message" : "bonsai tree"
}
}
})
doc = {
"query": {
"percolate": {
"field": "query",
"document": {
"message": "A new bonsai tree in the office"
}
}
}
}
res = es.search(index=elasticIndex, body=doc)
print(str(res))
日志信息:
send: b'GET /inverse-index/_search HTTP/1.1\r\nHost: localhost:9200\r\nAccept-Encoding: identity\r\nContent-Length: 78\r\nconnection: keep-alive\r\ncontent-type: application/json\r\n\r\n'
send: b'{"query":{"percolate":{"field":"query","document":{"message":"bonsai tree"}}}}'
DEBUG:urllib3.connectionpool:http://localhost:9200 "GET /inverse-index/_search HTTP/1.1" 200 160
INFO:elasticsearch:GET http://localhost:9200/inverse-index/_search [status:200 request:0.008s]
DEBUG:elasticsearch:> {"query":{"percolate":{"field":"query","document":{"message":"bonsai tree"}}}}
DEBUG:elasticsearch:< {"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}
reply: 'HTTP/1.1 200 OK\r\n'
示例页面的代码与 bash curl 命令配合使用效果很好。问题可能出在 python 站点上。
案件结案。 弹性索引是在后台创建的,我只需要等待几秒钟。不知道是否有选项可以证明,如果创建已经完成,但它对我有用。