我试图搜索包含elk上的值的文档,该值是由{##**}符号分隔的。例如,在ELK文档中存在一个键: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条记录。
发布于 2021-02-22 23:58:03
您需要使用一个| ,当遇到模式标记器时,它会将文本拆分为令牌。
添加一个工作示例
索引映射:
{
"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"
}
}
]https://stackoverflow.com/questions/66320921
复制相似问题