商品包含多个标签,
如 “一种焦炉荒煤气余热回收系统及回收方法” 标签为“资源与环境 焦炉荒煤气 余热回收 焦炉 上升管”
(1)当搜索条件为“热电阻 三线制 计算机” 能够匹配到,使用 should
(2)当搜索条件为“热电阻 三线制 计算机” 不能够匹配到,使用must
关键
"tag" : {
"type" : "text",
"analyzer": "whitespace"
}
使用whitespace分析器,按空格不分词
PUT http://172.16.21.34:9200/kjt
{
"mappings": {
"patent" : {
"properties" : {
"id" : {
"type" : "text"
},
"title" : {
"type" : "text"
},
"tag" : {
"type" : "text",
"analyzer": "whitespace"
}
}
}
}
}
PUT http://172.16.21.34:9200/kjt/patent
{
"id":"201901600045653788",
"title":"一种焦炉荒煤气余热回收系统及回收方法",
"tag":"资源与环境 焦炉荒煤气 余热回收 焦炉 上升管"
}
{
"id":"201901600045653800",
"title":"基于计算机硬盘分区的数据备份和恢复方法",
"tag":"电子信息 信息安全技术 数据备份 计算机安全 分区"
}
{
"id":"201901600045653794",
"title":"一种能实现测温校正的热电阻补偿电路",
"tag":"热电阻 补偿电路 测温校正 三线制"
}
{
"id":"201901600045653830",
"title":"一种拖运轧辊用牵引车",
"tag":"先进制造与自动化 汽车及轨道车辆相关技术 拖运 轧辊 牵引车"
}
POST http://172.16.21.34:9200/kjt/patent/_search
POST http://172.16.21.34:9200/kjt/patent/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"tag": "热电阻"
}
},
{
"term": {
"tag": "三线制"
}
},
{
"term": {
"tag": "孩子"
}
}
]
}
}
}
得到的结果
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.4523084,
"hits": [
{
"_index": "kjt",
"_type": "patent",
"_id": "hjwUq20BNJXFMOw6tIG5",
"_score": 1.4523084,
"_source": {
"id": "201901600045653794",
"title": "一种能实现测温校正的热电阻补偿电路",
"tag": "热电阻 补偿电路 测温校正 三线制"
}
}
]
}
}
使用 must 是匹配不到的
为了能够多返回信息,添加类似的数据,测试
{
"id":"201901600045653714",
"title":"热电阻研究技术",
"tag":"热电阻 技术研究 软件 大数据 三线制"
}
添加条件后
{
“term”: {
“tag”: “补偿电路”
}
}
目前使用ES主要使用上面的功能,其他优化暂无,重点在于如何将标签打好,以及将用户输入计算出合理的标签作为查询条件。
要熟悉ES的知识点:
(1)如何创建索引,类型和字段
(2)设置映射
(3)分析器的使用
(4)搜索语句
(5)must和should的区别
由于业务原因,需要能看到打分策略
ES的打分策略
博客参考ElasticSearch 使用教程之_score(评分)介绍
添加
"explain": true,
可以展示打分过程