如果没有与es 2.X的精确匹配,我如何获得成功?(Python elasticsearch)
我对elasticsearch有问题。索引中有一项(“'title':'UsingPython with Elasticsearch'”)。我可以得到返回的结果,只有我搜索了确切的查询。但是,当我搜索“'title':'usingpython with'”时,代码什么也打不到。如果没有与es 2.X的精确匹配,我如何获得成功?(Python elasticsearch),python,
elasticsearch,Python,
elasticsearch,我对elasticsearch有问题。索引中有一项(“'title':'UsingPython with Elasticsearch'”)。我可以得到返回的结果,只有我搜索了确切的查询。但是,当我搜索“'title':'usingpython with'”时,代码什么也打不到。 es版本是:{u'cluster_name':u'elasticsearch',u'tagline':u'You known,for Search',u'version':{u'lucene_version':u'5.4
es版本是:{u'cluster_name':u'elasticsearch',u'tagline':u'You known,for Search',u'version':{u'lucene_version':u'5.4.1',u'build_hash':u'd045fc29d1932bce18b2e65ab8b297fbf6cd41a1',u'number':u'2.2.2.1',u'build时间戳:u'2016-03-09T09:38:54Z',u'build快照:False},u'name':u'Lorelei Travis'}
如果我是对的,应该是es 2.2.1。代码见附件。那么,当我使用类似于“使用Python with”的查询进行搜索时,如果没有精确的匹配查询,我如何获得成功呢。谢谢
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
使用查询?如果你想要一些更有趣的东西,请考虑查询或查询。
编辑:如果我错了,请纠正我:是否希望将Python与
一起使用来匹配所有结果,例如将Python与Elasticsearch一起使用
,将Python与Lucene一起使用
?然后是一个映射,如:
request_body = {
"mappings":{
"post":{
"properties":{
"title":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
然后是如下查询:
{
"query": {
"prefix": {
"title": "Using Python with"
}
}
}
应归还所有相关文件。
注:我将索引
字段更改为未分析
更多
编辑2:
如果要匹配目标字段中任何位置包含精确查询的所有文档,而不仅仅是作为前缀,请使用最初建议的查询。然后
{
"query": {
"wildcard": {
"name": "Using Python with*"
}
}
}
将像前缀查询一样工作,并匹配使用Python和Elasticsearch的,以及使用Python和Lucene的,但是
{
"query": {
"wildcard": {
"name": "*Python with Elasticsearch"
}
}
}
将仅使用Python和Elasticsearch匹配。使用Python和elasticsearch时,它不会匹配,但您说过希望精确匹配短语。使用查询?如果你想要一些更有趣的东西,请考虑查询或查询。
编辑:如果我错了,请纠正我:是否希望将Python与
一起使用来匹配所有结果,例如将Python与Elasticsearch一起使用
,将Python与Lucene一起使用
?然后是一个映射,如:
request_body = {
"mappings":{
"post":{
"properties":{
"title":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
然后是如下查询:
{
"query": {
"prefix": {
"title": "Using Python with"
}
}
}
应归还所有相关文件。
注:我将索引
字段更改为未分析
更多
编辑2:
如果要匹配目标字段中任何位置包含精确查询的所有文档,而不仅仅是作为前缀,请使用最初建议的查询。然后
{
"query": {
"wildcard": {
"name": "Using Python with*"
}
}
}
将像前缀查询一样工作,并匹配使用Python和Elasticsearch的,以及使用Python和Lucene的,但是
{
"query": {
"wildcard": {
"name": "*Python with Elasticsearch"
}
}
}
将仅使用Python和Elasticsearch匹配。使用Python和elasticsearch时,它不会匹配,但您说过希望精确匹配短语。我知道模糊查询可以实现此功能。但我想实现全文搜索。谢谢谢谢它起作用了!但我想实现全文搜索。使用查询“Python With Elasticsearch”,它什么也打不到。好的,那么您需要一个regexp查询,我添加了一个示例。如果答案能解决你的问题,请接受。我非常感谢你的帮助!我主要有一个全文搜索的问题。对于这个官方教程,我的实验结果是“{”take:1,“timed_out”:false”,“u shards”:{“total”:1,“successful”:1,“failed”:0},“hits”:{“total”:0,“max_score”:null,“hits”:[]}“全文搜索似乎不起作用!谢谢您是否尝试了我在最新的答案编辑中建议的通配符查询?!我知道模糊查询可以实现这个功能。但我想实现全文搜索。谢谢谢谢它起作用了!但我想实现全文搜索。使用查询“Python With Elasticsearch”,它什么也打不到。好的,那么您需要一个regexp查询,我添加了一个示例。如果答案能解决你的问题,请接受。我非常感谢你的帮助!我主要有一个全文搜索的问题。对于这个官方教程,我的实验结果是“{”take:1,“timed_out”:false”,“u shards”:{“total”:1,“successful”:1,“failed”:0},“hits”:{“total”:0,“max_score”:null,“hits”:[]}“全文搜索似乎不起作用!谢谢您是否尝试了我在最新的答案编辑中建议的通配符查询?!