【发布时间】:2019-12-21 10:15:58
【问题描述】:
我正在寻找 elasticsearch 中最简单的查询系统,其中唯一的分隔符是空格。我想查询带有几乎所有类型字符的文本中的用户名,例如@username 或 @u$er-na_me
它以为这很容易,但经过长时间的搜索,我发现了一个“空白”分析器:
query.json:
{
"query": {
"simple_query_string" : {
"query": "@username",
"fields": ["mytextfield"],
"analyzer": "whitespace",
"default_operator": "and"
}
}
}
我运行的是:curl -X POST "http://localhost:9200/my.index/_search?pretty" -H 'Content-Type: application/json' -d '@query.json'
但是,它什么也不返回。
其他细节:
"query": "username"仍然有效如果我删除
"analyzer": "whitespace",那么"query": "username"和"query": "@username"会得到相同的结果我在 SO(例如 Simple query string with special characters such as ( and =)中看到过类似的帖子,它们似乎创建了新的索引或映射。如果这是要走的路,我将不胜感激一些资源来了解工作流程。
因此,总而言之,是否有任何简单的方法可以配置弹性搜索或查询以仅使用空格(以及理想的基本标点符号)进行标记?
【问题讨论】:
-
嗨@toto_tico 你能分享你的地图吗?您的字段是否使用空白分析器进行了分析?
-
我几乎看不懂你的问题,这让我觉得我没有用空白分析器分析这个领域。但是,这是有道理的;
mytextfield也需要先验分析:我已经阅读了一些关于标准分析器的内容,但改变它并不是直截了当的。如何分享我的地图? -
同时,我已经确定了我想使用的标记器是 char_group:
"tokenizer": { "type": "char_group", "tokenize_on_chars":["whitespace", "\n", ".", ",", ";", ":", "'", "\"" ]}。我还在想怎么把所有这些放在一起,但是 ES 有很多不容易消化的概念。
标签: elasticsearch