【发布时间】:2021-11-26 18:53:13
【问题描述】:
谁能用例子解释一下 ElasticSearch 中关键字和文本的区别?
【问题讨论】:
-
@a.l.老实说,我宁愿来这里得到我问题的确切答案,而不是筛选 elasticsearch 文档并解析答案
标签: elasticsearch
谁能用例子解释一下 ElasticSearch 中关键字和文本的区别?
【问题讨论】:
标签: elasticsearch
关键字类型: 如果您将字段定义为这样的关键字类型。
PUT products
{
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "keyword"
}
}
}
}
}
然后,当您对该字段进行搜索查询时,您必须插入整个值(关键字搜索)所以关键字字段。
POST products/_doc
{
"name": "washing machine"
}
当你像这样执行搜索时:
GET products/_search
{
"query": {
"match": {
"name": "washing"
}
}
}
它不会匹配任何文档。您必须使用整个单词“洗衣机”进行搜索。
另一方面,text 类型被分析,您可以使用字段值中的标记进行搜索。 在整个值中进行全文搜索:
PUT products
{
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
和搜索:
GET products/_search
{
"query": {
"match": {
"name": "washing"
}
}
}
将返回一个匹配的文档。
您可以查看更多详细信息keyword Vs. text
【讨论】:
文本数据类型和关键字数据类型之间的主要区别在于,文本字段是在索引时分析的,而关键字字段则不是。 这意味着,文本字段在索引时被分解为单独的术语以允许部分匹配,而关键字字段按原样索引。
关键字映射
"channel" : {
"name" : "keyword"
},
"product_image" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
【讨论】:
除了 keyword 类型在弹性搜索中的其他优点之外,还有一个优点是您可以在其中存储任何数据类型。无论是字符串、数字、日期等
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"
}
【讨论】: