如何在弹性搜索中比较两个文本字段

时间:2020-09-23 14:40:35

标签: elasticsearch elastic-stack

我需要在弹性搜索中比较两个文本字段,但是它们是文本字段。 对于普通字段,我可以使用脚本使用doc ['field']。value进行比较,但是有一种方法可以对文本字段进行相同的操作。

1 个答案:

答案 0 :(得分:0)

请参见以下ES DOCS摘录:

到目前为止,从脚本访问字段值的最快,最有效的方法是使用doc ['field_name']语法,该语法从doc值中检索字段值。 Doc值是一个列式字段值存储,默认情况下,除已分析的文本字段外,所有字段均启用。

我知道有两种方法可以从脚本访问文本值。

  1. 还映射文本字段的关键字表示形式并访问该字段。
{
    "mappings": {
      "properties": {
        "name":{
          "type": "text",
          "fields": {
          "keyword":{ // <======= See this
            "type":"keyword" 
          }
        }
      }
    }
  }
}

可以像'doc [name.keyword] .value'

一样访问关键字表示形式。

由于内存开销,建议为小文本字段(例如“名称”,“ emailId”)索引/存储字段的关键字表示形式,但不建议为“描述”之类的较大文本字段

  1. 另一种方法是在文本字段上启用字段数据并访问该字段。

默认情况下,在文本字段上禁用字段数据。将fielddata=true设置为 [your_field_name]的目的是通过将 倒排索引。请注意,这可能会占用大量内存。

但是,不建议在文本字段上使用字段数据。

注意:请确实添加有关为什么需要进行比较以及在“文本”字段中需要进行哪种比较的详细信息。