如果值包含在 ELK 字符串中,则返回结果

时间:2021-02-22 17:54:29

标签: elasticsearch

我正在尝试搜索包含 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 条记录。

1 个答案:

答案 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"
        }
      }
    ]
相关问题