Elasticsearch 精确匹配词组
Elasticsearch exact match pharse
我想在 Elasticsearch 中搜索一个词组以进行精确匹配。但 Elasticsearch 也提供其他包含的短语。
一个例子;我想搜索 "little cat",但 Elasticsearch returns "little cat jump"、"little cats"、"little cat saved the baby from death" 等...
我只想要准确的 "little cat",不需要其他的。我该如何查询?
我喜欢的内容;
{
title: "little cat",
content: "bla bla bla"
},
...
这在很大程度上取决于 title
的索引方式。对于这样的要求,title
需要是 analyzed as keyword
,这意味着 title
中的任何文本都与 ES 的内部 Lucene 倒排索引中的文本完全相同。
term
过滤器将是在 title
中搜索 little cat
的选择,分析为 keyword
。
如果您想在索引时对 title
字段进行其他操作,您可以 add a filter,例如小写任何大写字母。但是,无论如何,您确实需要一个 keyword
分析仪。
如果您现在不想更改 title
的索引方式,您可以 make it as multi_field
并添加一个 title_keyword
(例如)应该使用您的索引的字段keyword
分析器。
在索引字符串字段时,字符串的默认映射索引类型是 analyzed
(类似于 MySQL
上的全文索引)。您应该重新创建映射并将索引类型设置为 not_analyzed
.
查看此内容以了解更多关于 Core Types 和
mapping
我想在 Elasticsearch 中搜索一个词组以进行精确匹配。但 Elasticsearch 也提供其他包含的短语。
一个例子;我想搜索 "little cat",但 Elasticsearch returns "little cat jump"、"little cats"、"little cat saved the baby from death" 等...
我只想要准确的 "little cat",不需要其他的。我该如何查询?
我喜欢的内容;
{
title: "little cat",
content: "bla bla bla"
},
...
这在很大程度上取决于 title
的索引方式。对于这样的要求,title
需要是 analyzed as keyword
,这意味着 title
中的任何文本都与 ES 的内部 Lucene 倒排索引中的文本完全相同。
term
过滤器将是在 title
中搜索 little cat
的选择,分析为 keyword
。
如果您想在索引时对 title
字段进行其他操作,您可以 add a filter,例如小写任何大写字母。但是,无论如何,您确实需要一个 keyword
分析仪。
如果您现在不想更改 title
的索引方式,您可以 make it as multi_field
并添加一个 title_keyword
(例如)应该使用您的索引的字段keyword
分析器。
在索引字符串字段时,字符串的默认映射索引类型是 analyzed
(类似于 MySQL
上的全文索引)。您应该重新创建映射并将索引类型设置为 not_analyzed
.
查看此内容以了解更多关于 Core Types 和 mapping