ElasticSearch中关键字和文本之间的区别

arc*_*ura 19 elasticsearch

有人可以举例说明在ElasticSearch中关键字和文本之间的区别吗?

Tar*_*sam 28

关键字类型:如果您将一个字段定义为类似关键字的类型。

 PUT products
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "keyword"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,当您在此字段上进行搜索查询时,您必须插入整个值(关键字搜索),即关键字字段。

 POST products/_doc
{
  "name": "washing machine"
}
Run Code Online (Sandbox Code Playgroud)

当您执行这样的搜索时:

 GET products/_search
{
  "query": {
    "match": {
      "name": "washing"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它将不匹配任何文档。您必须搜索整个词“洗衣机”。

另一方面,将分析文本类型,并且您可以使用字段值中的标记进行搜索。全文搜索

    PUT products
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "text"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

和搜索:

 GET products/_search
{
  "query": {
    "match": {
      "name": "washing"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

将返回匹配的文档。

您可以检查此以了解更多详细信息关键字Vs。文本

  • 谢谢你帮我解决了这个问题。我觉得他们应该改变类型名称。我一直认为关键字类型意味着它被分解为单独的标记。 (2认同)

小智 18

文本数据类型和关键字数据类型之间的主要区别在于,文本字段在索引时进行分析,而关键字字段则不然。这意味着,文本字段在索引时被分解为单独的术语,以允许部分匹配,而关键字字段则按原样进行索引。

关键词映射

"channel" : {
    "name" : "keyword"
},

"product_image" : {
    "type" : "text",
    "fields" : {
        "keyword" : {
        "type" : "keyword",
        "ignore_above" : 256
        }
     }
}
Run Code Online (Sandbox Code Playgroud)


mru*_*ult 8

除了弹性搜索中关键字类型的其他优点之外,还有一个优点是您可以在其中存储任何数据类型。无论是字符串、数字、日期等。

PUT /demo-index/
{
  "mappings": {
      "properties": {
        "name": { "type": "keyword" }
      }
    }
}

POST /demo-index/_doc
{
  "name": "2021-02-21"
}

POST /demo-index/_doc
{
  "name": 100
}

POST /demo-index/_doc
{
  "name": "Jhon"
}
Run Code Online (Sandbox Code Playgroud)