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 Typesmapping