Elasticsearch WildcardQuery 检索总结

现在使用Es版本为5+,经常有人放映 match不生效。

String 字段

es 2+版本 String 是字符串字段。

5.*之后,把string字段设置为了过时字段,引入text,keyword字段

这两个字段都可以存储字符串使用,但建立索引和搜索的时候是不太一样的

keyword:存储数据时候,不会分词建立索引。

text:存储数据时候,会自动分词,并生成索引(这是很智能的,但在有些字段里面是没用的,所以对于有些字段使用text则浪费了空间)。

match进行匹配的

使用term匹配的时候,主要是确定词匹配 keyword或者 integer类型,可以是数组。

Wildcard Query

匹配具有与通配符表达式匹配的字段(not analyzed)的文档。支持的通配符是*,它匹配任何字符序列(包括空字符序列)和?,它匹配任何单个字符。请注意,此查询可能很慢,因为它需要迭代多个术语。为了防止极慢的通配符查询,通配符术语不应该以通配符*或?之一开头。通配符查询映射到Lucene WildcardQuery。

GET /_search
{
 "query": {
 "wildcard" : { "user" : "ki*y" }
 }
}

wildcard 在生产环境使用时会有性能问题。建议大家使用分词方式。


分享到:


相關文章: