您可以使用Analyze API检查您的文档是如何被索引的。如您所见,您的文档被索引为两个标记:us
和2343
.
$ curl "localhost:9200/your_index/_analyze?analyzer=snowball&pretty=true" -d "US-2343"
{
"tokens" : [ {
"token" : "us",
"start_offset" : 0,
"end_offset" : 2,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "2343",
"start_offset" : 3,
"end_offset" : 7,
"type" : "<NUM>",
"position" : 2
} ]
}
当您搜索时us-23*
,elasticsearch 会尝试查找带有以 . 开头的标记的文档us-23
。发生这种情况是因为未分析通配符表达式。如您所见,snowball
解析器不会生成此类标记,因此不会返回任何结果。当您搜索两个标记us
和带有前缀的标记时23
,您会得到结果。
看看text_phrase_prefix
查询。它可能更适合您的需求。