Elasticsearch字段数据结构说明之字符串类型
字符串类型:text 与 keyword
text
:字段类型用于全文搜索1,会应用分词器将文本拆分成单词,然后进行索引。可以进行全文搜索和匹配,但不支持精确匹配,且text字段不支持排序。一个具有注脚的文本。keyword
:字段类型用于精确匹配2,不会拆分文本,将整个字段内容视为一个单元进行索引。但不支持全文搜索,可用于过滤、排序、聚合检索。
text与keyword的结合应用:es实现字符串数组形式结构
当要将某个字段设置为字符串数组时,可以使用text字段类型的multi-fields功能来支持全文搜索和精确匹配。以下是相应的映射示例:
{
"mappings": {
"properties": {
"isIndividual": {
"type": "boolean"
},
"akaList": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
// 其他字段...
}
}
}
本例中将akaList字段设置为字符串数组。在这个示例中,在akaList字段中定义了一个额外的keyword子字段,以便支持精确的关键字匹配。这可以对 akaList 字段进行全文搜索,同时还可以通过 akaList.keyword 字段进行精确匹配。
即通过akaList
,如查询到akaList 中的所有信息:
{
"akaList": ["John Doe", "Jane Smith"]
}
akaList.keyword
,如根据akaList中某一个具体的值,查询文档信息
{
"query": {
"term": {
"akaList.keyword": "John Doe"
}
}
}
// 本例中使用term 查询来匹配 akaList.keyword 字段中的值为 "John Doe" 的文档
上述示例中,查询返回的结果是一个包含匹配文档的 JSON 响应。这个响应包含了查询的结果和元数据。