ES keyword如何存一个list<string>
时间: 2024-09-27 07:16:35 浏览: 21
在Elasticsearch (ES) 中,当你想以精确匹配的方式存储一个`List<String>`(即不进行分词)并支持keyword类型时,你应该直接将这个列表作为值存储。Keyword类型是专为那些不需要分析(如不进行分词)的文本设计的,它们可以保存原始的字符串形式。
例如,假设你有一个帖子模型Post,它有一个标题数组`post_titles`,你可以这样操作:
```json
{
"mappings": {
"properties": {
"post_titles": {
"type": "keyword",
"fields": {
"raw": { "type": "text" } // 如果你想保留原始字符串供未来可能的需求
}
}
}
}
}
// 插入文档
{
"title_array": ["exact match 1", "exact match 2"]
}
```
这里,`post_titles`字段被标记为`keyword`类型,这意味着在搜索时会直接匹配整个单词串,而不会分割成单个词语。如果你想保留原始字符串,可以在同一个字段下添加一个名为`raw`的子字段,其类型为"text"。
对于模糊搜索,ES 的`match`查询通常用于文本分析,如`text`类型,如果要保持关键词的精确性,应该避免使用`match`查询,而是选择`term`查询或者`match_phrase`查询,具体取决于你的需求。但是,对于`keyword`类型的字段,`match`查询不会起作用,因为它只适用于分析字段。