使用 dmesg 来查看一些硬件或驱动程序的信息或问题。

es 精确值查询问题

Elasticsearch | 作者 iwtbafp | 发布于2017年11月30日 | 阅读数:6435

QueryBuilder builder = QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("scode",queryParam.trim()).analyzer("whitespace").minimumShouldMatch("100%"));
在java中,我构建了一个这样的查询器,但是出现了一些问题。索引的mapping大概是这样的
"mappings": {
      "mobilephone": {
        "_all": {
          "enabled": false
        },
        "properties": {
          "id": {
            "type": "integer"
          },
          "price": {
            "type": "integer"
          },
          "rank": {
            "type": "integer"
          },
          "scode": {
            "type": "text",
            "analyzer": "whitespace",
            "fielddata": true
          },
          "time": {
            "type": "date"
          }
        }
      }
    }
可以看到scode字段是文本字段,分词使用whitespace,现在的问题是如果queryParam="str1 str2",命中的文档存在只包括str1或者只包括str2评分较低的文档,我希望的结果是str1 和str2 同时包含才算命中。这个应该怎么构建?
 
java代码转换为json 大概是这样的
GET /index/type/_search 
{
  "query":{
    "bool":{
      "must":{
        "match":{
          "scode":"ios 5000up"
        }
      },
       "minimum_number_should_match": "100%"
    },
  }--,
--"from": 0,
 --"size": 200
}
我使用了minimum_number_should_match,但是好像不是很好使 如果我给must改成should,也达不到效果。
实际索引的数据大概是这样的
_id    _score                    scode                                                                    id     date          price   rank       
848288 1         jy 1000 4000up 300under nvidiaxp gddr5 fs rg          848288 2013-09-11 899 1331
848104 1        malata 1000 3000up 30pfm                                         848104 2013-09-10 598 1313
847684 1         h3c ethernet 5000up 5000 duidie erceng 10mbps     847684 2013-09-06 1550 1333
847890 1         apc 1000up                                                                  847890 2013-09-09 1025 1310
已邀请:

wyntergreg

赞同来自: iwtbafp

and

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: iwtbafp

must 两次就可以

要回复问题请先登录注册