目录
1 term query - 索引词检索
1.1 term query - 不分词检索
term query: 把检索串当作一个整体来执行检索, 即不会对检索串分词.
term是完全匹配检索, 要用在不分词的字段上, 如果某个field在映射中被分词了, term检索将不起作用.
所以, 不分词的field, 要在mapping中设置为不分词.
—— es 5.x之后, 为每个text类型的字段新增了名为keyword的子字段, 是不分词的, 默认保留256个字符.
—— 可以使用keyword字段进行term检索. 示例:
get shop/_search
{
"query": {
"term": {
"name.keyword": "java编程思想"
}
}
}
1.2 terms query - in检索
terms, 相当于多个term检索, 类似于sql中in关键字的用法, 即在某些给定的数据中检索:
get shop/_search
{
"query": {
"terms": {
"name.keyword": [
"java编程思想", "java并发编程的艺术"
]
}
}
}
2 prefix query - 前缀检索
prefix query, 就是前缀检索. 比如商品name中有多个以"java"开头的document, 检索前缀"java"时就能检索到所有以"java"开头的文档.
—— 扫描所有倒排索引, 性能较差.
get shop/_search
{
"query": {
"prefix": { "name": "java" }
}
}
3 wildcard query - 通配符检索
扫描所有倒排索引, 性能较差.
get shop/_search
{
"query": {
"wildcard": { "name": "ja*" }
}
}
4 regexp query - 正则检索
扫描所有倒排索引, 性能较差.
get shop/_