Elasticsearch - 通配符、前缀、正则表达式、query_string 差异和性能

Ara*_*ndi 4 tags lucene full-text-search elasticsearch

我刚刚开始在我的项目中使用 Elasticsearch,我想像 sql 关键字“like%”一样进行搜索。

  1. 谁能解释一下WildcardPrefixquery_stringRegexp之间的区别吗?

  2. 哪一个搜索性能最好?

  3. 这是通过定义关键字字段在产品标签之间快速搜索并使用我提到的三种方式之一进行搜索的最佳方法吗?

我很感激回答我的人。

谢谢。

Nik*_*iev 7

哪个查询更好?

让我逐点回答吧。

  1. 谁能解释一下通配符、前缀、query_string 和正则表达式之间有什么区别?

它们的功能和实施方式非常相似。事实上,通配符前缀正则表达式的 性能同样糟糕query_string查询允许更复杂的查询,例如使用ORand等逻辑运算符ANDquery_string支持通配符wildcard,我相信这与查询的通配符相同。

  1. 哪一个搜索性能最好?

底线:它们都很糟糕。

  1. 这是通过定义关键字字段在产品标签之间快速搜索并使用我提到的三种方式之一进行搜索的最佳方法吗?

我相信,如果您使用布尔过滤器查询来减少匹配文档的数量,那么性能应该会提高,但性能增益可能仍然会被上面的类似正则表达式的查询效率低下所压倒。

如何使用 Elasticsearch 实现自动完成?

正如您在上面的评论中提到的,您希望实现自动完成,因此search_as_you_type数据类型可能正是您正在寻找的。

另一个类似的功能是suggesters。他们都将尝试使用更有效的基于术语的匹配,而不是基于正则表达式。

希望有帮助!