介绍
本章会详细介绍基于term和基于全文搜索,通过不同的demo,介绍两种搜索的区别。
term搜索
term:最小单位
- 特点
-- 种类:Match Query,Range Query,和Exist Query等
-- term查询,是不做分词处理的。会将输入当做一个整体。
-- 可以通过Constant Score将查询转化成一个Filtering,避免算法,并利用缓存,可以提高性能
这里对term查询做一个大小写的demo查询
// 例子1
POST /products/_search
{
"query": {
"term": {
"desc": {
"value": "iPhone"
}
}
}
}
// 例子2
POST /products/_search
{
"query": {
"term": {
"desc": {
"value":"iphone"
}
}
}
}
如上,因为插入的时候会对大写进行小写的修改,所以以上例1没有命中。
例1返回结果.png例2返回结果
全文搜索
- 特点
-- 种类:Match Query,Match Phrase Query等
-- 索引和搜索时进行分词,查询字符串先到达一个分词器,产生一个可供查询的词项列表
-- 查询会对每个词项进行底层的查询,再讲结果进行合并,最后生成一个分数。
POST groups/_search
{
"query": {
"match_phrase": {
"names": {
"query": "Water Water",
"slop": 100
}
}
}
}
POST groups/_search
{
"query": {
"match_phrase": {
"names": "Water Smith"
}
}
}
以上结果中使用了match_phrase,其中slop参数标识进行分词后词项之间的距离。
总结
本章介绍了term和全文的搜索,通过demo演示了两者的区别。
引用
https://www.elastic.co/guide/cn/elasticsearch/guide/current/slop.html
网友评论