我正在尝试搜索包含 elk 值的文档,该值由 | 分隔。象征。例如,在 ELK 文档中存在 key:value -> elk_value : 'AGA>23/180@20210212-1|AGA>23/180@20210212-2|AGA>23/180@20210212-3'
如何搜索所有包含 AGA>23/180@20210212-1
字段 elk_value
的文档?
我试过术语:
{
"query": {
"term": {
"elk_value.keyword": "AGA>23/180@20210212-1"
}
}
}
但是找到了 0 条记录。
答案 0 :(得分:1)
您需要使用 pattern tokenizer,它会在遇到 |
时将文本拆分为标记。
添加一个工作示例
索引映射:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": "\\|| "
}
}
}
},
"mappings": {
"properties": {
"elk_value": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
分析 API:
GET /_analyze
{
"analyzer" : "my_analyzer",
"text" : "'AGA>23/180@20210212-1|AGA>23/180@20210212-2|AGA>23/180@20210212-3"
}
将生成以下令牌
{
"tokens": [
{
"token": "'AGA>23/180@20210212-1",
"start_offset": 0,
"end_offset": 22,
"type": "word",
"position": 0
},
{
"token": "AGA>23/180@20210212-2",
"start_offset": 23,
"end_offset": 44,
"type": "word",
"position": 1
},
{
"token": "AGA>23/180@20210212-3",
"start_offset": 45,
"end_offset": 66,
"type": "word",
"position": 2
}
]
}
索引数据:
{
"elk_value": "AGA>23/180@20210212-6|AGA>23/180@20210212-4|AGA>23/180@20210212-5"
}
{
"elk_value": "AGA>23/180@20210212-1|AGA>23/180@20210212-4|AGA>23/180@20210212-5"
}
{
"elk_value": "AGA>23/180@20210212-1|AGA>23/180@20210212-2|AGA>23/180@20210212-3"
}
搜索查询:
{
"query": {
"match": {
"elk_value": "AGA>23/180@20210212-1"
}
}
}
搜索结果:
"hits": [
{
"_index": "66320921",
"_type": "_doc",
"_id": "1",
"_score": 0.4700036,
"_source": {
"elk_value": "AGA>23/180@20210212-1|AGA>23/180@20210212-2|AGA>23/180@20210212-3"
}
},
{
"_index": "66320921",
"_type": "_doc",
"_id": "2",
"_score": 0.4700036,
"_source": {
"elk_value": "AGA>23/180@20210212-1|AGA>23/180@20210212-4|AGA>23/180@20210212-5"
}
}
]