在 Elasticsearch 上使用 query_string 在字符串字段中搜索数字

Sim*_*ger 0 string search query-string elasticsearch

在其他文本字段中,我的 Elasticsearch 索引中有这个字符串字段:

"user": { "type": "string", "analyzer": "simple", "norms": { "enabled": False } }
Run Code Online (Sandbox Code Playgroud)

它填充了一个典型的用户名,例如“simon”。

使用 query_string 我可以将“其他搜索词”的搜索结果限制为该特定用户:

'query': { 'query_string': { 'query': 'user:simon other search terms' } }
Run Code Online (Sandbox Code Playgroud)

默认运算符设置为“AND”。但是,如果用户名只包含一个数字(保存并索引为字符串),Elasticsearch 似乎会忽略“user:...”语句。例如:

'query': { 'query_string': { 'query': 'user:111 other search terms' } }
Run Code Online (Sandbox Code Playgroud)

产生相同的结果

'query': { 'query_string': { 'query': 'other search terms' } }
Run Code Online (Sandbox Code Playgroud)

知道可能是什么原因或如何解决吗?

And*_*fan 5

您正在使用分simple词器。正如文档所说

使用小写分词器构建的简单类型的分析器。

小写标记器使用字母标记器和小写标记过滤器。您的特定测试数据的问题在于字母标记器将文本划分为非字母。并且数字是非字母的。Java API 中的这个方法定义了字母到底是什么。相比之下,Java API 中的这个方法定义了数字到底是什么。

您可能想查看分standard词器。