gpt4 book ai didi

python - 如何在不完全匹配es 2.X的情况下获得成功? (Python弹性搜寻)

转载 作者:行者123 更新时间:2023-12-03 00:09:59 24 4
gpt4 key购买 nike

我对elasticsearch有问题。索引中有一个项目(“标题”:“将Python与Elasticsearch一起使用”)。我只有获得确切的查询,才能得到返回的结果。但是,当我搜索“'title':'Using Python with'”时,代码什么也打不上。
es版本为:{u'cluster_name':u'elasticsearch',u'tagline':u'You Know,for Search',u'version':{u'lucene_version':u'5.4.1',u' build_hash':u'd045fc29d1932bce18b2e65ab8b297fbf6cd41a1',u'number':u'2.2.1',u'build_timestamp':u'2016-03-09T09:38:54Z',u'build_snapshot':False},u'name' :u'Lorelei Travis'}
如果我是对的,则应为es 2.2.1。该代码已附加。因此,当我使用“与Python一起使用”之类的查询进行搜索而没有完全匹配查询时,如何获得成功。谢谢!

INDEX_NAME = 'test_11'
from elasticsearch import Elasticsearch
es = Elasticsearch()
print es.info()

request_body = {
"mappings":{
"post":{
"properties":{
"title":{
"type":"string",
"index":"analyzed"
}
}
}
}
}

if es.indices.exists(INDEX_NAME):
res = es.indices.delete(index = INDEX_NAME)
print(" response: '%s'" % (res))

res = es.indices.create(index = INDEX_NAME, body=request_body)
print res

es.index(index=INDEX_NAME, doc_type='post', id=1, body={
'title': 'Using Python with Elasticsearch'
}
)

es.indices.refresh(index=INDEX_NAME)

res = es.search(index=INDEX_NAME, body={'query': {'match': {'title': 'Using Python with Elasticsearch'}}})
#res = es.search(index=INDEX_NAME, body ={"query":{"match":{"title":"Using Python with"}}})

print '\n'
res = es.indices.get(index=INDEX_NAME)
print res

最佳答案

使用prefix查询?如果您想要更高级的功能,请考虑使用regexp查询或fuzzy查询。

编辑:如果我错了,请纠正我:您希望Using Python with匹配所有结果,例如Using Python with ElasticsearchUsing Python with Lucene吗?然后是一个像这样的映射:

request_body = {  
"mappings":{
"post":{
"properties":{
"title":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}

然后是一个查询,如:
{
"query": {
"prefix": {
"title": "Using Python with"
}
}
}

应返回所有相关文件。
注意,我将 index字段更改为 not_analyzed

更多 here

编辑2:
如果要匹配在目标字段中的任意位置包含精确查询的所有文档,而不仅仅是前缀,请按照最初建议的方式使用 regexp查询。然后
{
"query": {
"wildcard": {
"name": "Using Python with*"
}
}
}

将像前缀查询一样工作,并且匹配 Using Python with ElasticsearchUsing Python with Lucene,但是
{
"query": {
"wildcard": {
"name": "*Python with Elasticsearch"
}
}
}

仅匹配 Using Python with Elasticsearch。它不会匹配 Using Python with elasticsearch,但您说过想要完全匹配的词组。

关于python - 如何在不完全匹配es 2.X的情况下获得成功? (Python弹性搜寻),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com