在我的情况下,我的字段就像“ abc,123”,我希望可以在“ abc”或“ 123”中进行搜索。 我的索引映射就像下面的代码
{
"myfield": {
"type": "text",
"analyzer": "stop",
"search_analyzer": "stop" }
但是当我使用es _analyzer API进行测试时,我得到了结果
{
"tokens": [
{
"token": "abc",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
}
]
}
“ 123”丢失了。 如果我想满足自己的情况,是否需要选择其他分析仪还是仅添加一些特殊配置?
答案 0 :(得分:2)
您需要选择standard
分析器,因为stop
分析器在遇到非字母的字符时会将文本分解为多个词,并删除“ the”之类的停用词。在您的情况下,使用停止分析器时,“ abc,123”导致令牌abc。使用标准分析器,它会返回abc和123,如下所示:
POST _analyze
{
"analyzer": "standard",
"text": "abc, 123"
}
输出:
{
"tokens": [
{
"token": "abc",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "123",
"start_offset": 5,
"end_offset": 8,
"type": "<NUM>",
"position": 1
}
]
}
EDIT1 使用简单模式拆分标记器
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "simple_pattern_split",
"pattern": ","
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "abc,123"
}
输出:
{
"tokens": [
{
"token": "abc",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": "123",
"start_offset": 4,
"end_offset": 7,
"type": "word",
"position": 1
}
]
}