使用下一个默认设置在弹性搜索中创建索引后:
{ "autosuggest_destination": {
"aliases": {},
"mappings": {
"destination": {
"properties": {
"city": {
"type": "string"
},
"country": {
"type": "string"
},
"id": {
"type": "string"
},
"state": {
"type": "string"
}
}
}
},
"settings": {
"index": {
"creation_date": "1459329252404",
"number_of_shards": "1",
"number_of_replicas": "0",
"version": {
"created": "1070299"
},
"uuid": "_1D7ZW0dQwy9kiKn0kKrLw"
}
},
"warmers": {} } }
将数据插入索引并验证后。
我在尝试搜索自动完成字时出现此问题:
当我尝试搜索“新”时,它创建了匹配项(纽约)。但如果我 试图在“新y”之后添加一个空格和第一个字母 没有。之后它试图在'new之后添加一个空格和两个字母 哟'它有效。
主要问题是理解为什么第一个字后跟一个字 空间不匹配?
示例:
GET autosuggest_destination/destination/_search { "query": {
"match": {
"city": {
"query": "new",
"type": "phrase_prefix"
}
} }
Result : New York
GET autosuggest_destination/destination/_search { "query": {
"match": {
"city": {
"query": "new y",
"type": "phrase_prefix"
}
} }
No Result
GET autosuggest_destination/destination/_search { "query": {
"match": {
"city": {
"query": "new yo",
"type": "phrase_prefix"
}
} }
Result : New York
有谁知道这应该是什么问题?
答案 0 :(得分:0)
索引文档时的Elasticsearch使用分析器(默认分析器或自定义分析器),当您搜索某些值时,它会将文档拆分为术语,然后它将与您要搜索的内容进行匹配。
在你的例子中:
使用默认分析器分析纽约,它会将您的文档拆分为2个术语New,York。
当您搜索新功能时,它会找到第一个词新,因此它会给您回复纽约。
如果您按New Y搜索,它会将搜索分为两个词:New,Y或New,Yo,它会尝试查找符合这两个词的文档。您遇到的问题可能来自max_expansions param
看看这里http://elasticsearch-users.115913.n3.nabble.com/How-exactly-works-quot-max-expansions-quot-in-match-phrase-prefix-query-td4030146.html
还有关于分析仪。
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html
答案 1 :(得分:0)
如果我想查询部分单词,例如" ork"到(结果执行:纽约) 然后没有命中。 我正在寻找文档中的指南,所有我能找到的是将查询更改为通配符,这将允许我这样做。 但我希望使用phrase_prefix只能通过部分单词搜索。 那可能吗?