问题描述
我遇到这个问题,无论我在查询中发送什么值,在搜索到第五个字符后都不会得到任何结果。
示例:
- {“ match”:{“ name”:“ benjami”}}-将不返回任何结果
- {“ match”:{“ name”:“ benja”}}-返回名称为Benja ...的结果...
- {“ match”:{“ name”:“ benjamin”}}-返回名称为Benjamin的结果
索引:
“名称”:{ “ type”:“ string”, “ analyzer”:“ edge_ngram_analyzer” }
设置:
"analyzer": {
"edge_ngram_analyzer":{
"type": "custom","tokenizer": "standard","filter": ["lowercase","edge_ngram_filter"]}},"filter": {
"edge_ngram_filter":{
"type": "edge_ngram","min_gram": 1,"max_gram": 40}}
使用术语向量,我发现该字段已正确索引。问题出在某个地方,弹性搜索无法搜索我的完整查询值。有谁知道为什么会这样吗?非常感谢您的帮助,我使用的是弹性搜索5.6版!
索引
"properties" : { "searchid": {"type": "string","index": "not_analyzed"},"otherId": {"type": "string","analyzer": "edge_ngram_analyzer"},"name": {"type": "string",}
设置
"settings": {
"number_of_replicas": 0,"analysis": {
"filter": {"edge_ngram_filter": {"type": "edge_ngram","min_gram": 2,"max_gram": 80}},"analyzer": {
"edge_ngram_analyzer": {
"type": "custom","tokenizer": "my_tokenizer","edge_ngram_filter"],},"short_edge_ngram_analyzer": {
"type": "custom","case_sensitive": {"type": "custom","tokenizer": "whitespace","filter": []}
},"tokenizer": {
"my_tokenizer": {
"type": "edge_ngram","max_gram": 40,"token_chars": [
"letter","digit"
]
}
},
{'query':
{'function_score':
{'query':
{'bool': {'should': [{'multi_match': {'query': 'A162412350','fields': ['otherId']}}}]}},'functions': [{'field_value_factor': {'field': 'positionorActive','modifier': 'none','missing': '0','factor': '1.1'}}],'score_mode': 'sum','boost_mode': 'sum'}},'size': 25}
文档结果
[{u'otherId': u'A1624903499',u'positionorActive': 0,'searchscore': 18.152431,u'id': 35631,{u'otherId': u'A1624903783',u'id': 35632,{u'otherId': u'A1624904100',u'id': 35633,]
设置
{
"issuersearch": {
"settings": {
"index": {
"refresh_interval": "1s","number_of_shards": "1","provided_name": "issuersearch","creation_date": "1602687790617","analysis": {
"filter": {
"edge_ngram_filter": {
"type": "edge_ngram","min_gram": "2","max_gram": "80"
}
},"analyzer": {
"edge_ngram_analyzer": {
"filter": Array[2][
"lowercase","edge_ngram_filter"
],"type": "custom","tokenizer": "my_tokenizer"
},"short_edge_ngram_analyzer": {
"filter": Array[2][
"lowercase","tokenizer": "standard"
},"case_sensitive": {
"type": "custom","tokenizer": "whitespace"
}
},"tokenizer": {
"my_tokenizer": {
"token_chars": Array[2][
"letter","digit"
],"type": "edge_ngram","max_gram": "40"
}
}
},"number_of_replicas": "0","uuid": "dexqFx32RXy-AC3HHpfElA","version": {
"created": "5060599"
}
}
}
}
}
解决方法
这可能是由于standard
令牌生成器将空格上的令牌拆分而引起的,您需要提供完整的示例(全索引映射,示例文档以及搜索查询的实际结果以确认它)。
另外,希望您在name
字段上不要使用任何search_analyzer。