所以,我应该通过说我明白*是一个特殊的字符,应该为弹性搜索查询进行转义。这是我面临的设置和麻烦。基本问题归结为我无法搜索仅包含' *'的字段。
curl -XPUT 'http://localhost:9200/test_index/test_item/1' -d '{
"some_text" : "*"
}'
curl -XPUT 'http://localhost:9200/test_index/test_item/2' -d '{
"some_text" : "1+*"
}'
curl -XPUT 'http://localhost:9200/test_index/test_item/3' -d '{
"some_text" : "asterisk"
}'
curl -XGET 'http://localhost:9200/test_index/_search?q=some_text:*'
Results:
"hits":{"total":2,"max_score":1.0,"hits":[
"_source":{"some_text" : "1+*"},
"_source":{"some_text" : "asterisk"}
]
curl -XGET 'http://localhost:9200/test_index/_search?q=some_text:\*'
Results:
"hits":{"total":0,"max_score":null,"hits":[]}
Using python elasticsearch:
>>>from elasticsearch import Elasticsearch
>>> es = Elasticsearch()
>>>es.search(index='test_index', doc_type='test_item', body={"query":{"match":{"some_text":"*"}}})
No hits
>>>es.search(index='test_index', doc_type='test_item', body={"query":{"match":{"some_text":"asterisk"}}})
One hit('asterisk')
>>>es.search(index='test_index', doc_type='test_item', body={"query":{"match":{"some_text":"\*"}}})
No hits
Using pyelasticsearch
>>>es.search('some_text:*', index='test_index')
2 hits, '1+*' and 'asterisk'
>>>es.search('some_text:\*', index='test_index')
No hits
如何在搜索中显示第一项?尽管各种搜索方法之间存在不一致之处,但所有这些方法似乎都同意我不允许这样做。' *'回来了,为什么?此外,逃避*似乎使问题变得更糟,这有点不寻常。 (我假设库中可能存在一些自动转换,但这并不能解释直接的ES查询。)
编辑:我应该提到它绝对是索引的。
>>>es.get('test_index', 'test_item', 1)
{'_index': 'test_index', '_version': 1, '_id': '1', 'found': True, '_type': 'test_item', '_source': {'some_text': '*'}}
它可能存储了,据我所知,这对于弹性搜索来说是一个特殊的东西?
答案 0 :(得分:0)
通过将分析仪更改为空白分析仪来解决此问题。 (这是一个lucene问题,而不是弹性搜索,这就是为什么很难找到它!)