本文共 2544 字,大约阅读时间需要 8 分钟。
term精确搜索
搜索的时候会把用户搜索内容,比如“我知道”作为一整个关键词去搜索,而不会对其进行分词后再搜索POST http://10.0.0.220:9200/shop/_doc/_search{ "query":{ "term":{ "nickname":"我知道" } }, "_source":[ "id", "nickname", "age" ]}head可视化操作: terms 多个词语匹配检索
POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "terms": { "desc": ["我知道", "好好学习", "搜索"] } }}
match分词搜索
match会对慕课网先进行分词(其实就是全文检索),在查询,而term则不会,直接把“我知道”作为一个整的词汇去搜索。POST http://10.0.0.220:9200/shop/_doc/_search{ "query":{ "match":{ "nickname":"我知道" } }, "_source":[ "id", "nickname", "age" ]}
对比上面term和match的结果便知道效果
match_phrase 短语匹配
分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的。POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "match_phrase": { "desc": { "query": "男人 低", "slop": 20 } } }}
slop:允许词语间跳过的数量
operator
or:搜索内容分词后,只要存在一个词语匹配就展示结果
and:搜索内容分词后,都要满足词语匹配POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "match": { "desc": "不知道在哪里" } }}##等同于{ "query": { "match": { "desc": { "query":"不知道在哪里", "operator":"or" } } }}
##相当于
select * from shop where desc=‘不知道’ or|and desc=‘在哪里’ minimum_should_match 最低匹配精度,至少有 [分词后的词语个数] x百分百,得出一个数据值取整。举个例子:当前属性设置为70,若一个用户查询检索内容分词后有10个词语,那么匹配度按照 10x70%=7,则desc中至少需要有7个词语匹配,就展示;若分词后有8个,则 8x70%=5.6,则desc中至少需要有5个词语匹配,就展示。也能设置具体的数字,表示个数。POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "match": { "desc": { "query": "哈哈哈,你搞什么,我在哪里", "minimum_should_match": "60%" } } }}
当我们把这个百分比调大:
根据文档索引id查询
POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "ids": { "type": "_doc", "values": ["1001", "1007", "1008"] } }}
multi_match
满足使用match在多个字段中进行查询的需求(提升权重前)POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "multi_match":{ "query":"为道在哪里", "fields":[ "desc","nickname" ] } }}
boost
权重,为某个字段设置权重,权重越高,文档相关性得分就越高。通畅来说搜索商品名称要比商品简介的权重更高。POST http://10.0.0.220:9200/shop/_doc/_search{ "query": { "multi_match":{ "query":"为道在哪里", "fields":[ "desc^10","nickname" ###次数^10就是提高权重 ] } }}
desc^10 代表搜索提升10倍相关性,也就是说用户搜索的时候其实以这个desc为主,nick为辅,desc的匹配相关度当然要提高权重比例了。
转载地址:http://wrwpn.baihongyu.com/