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
在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
2 个回复
wyntergreg
赞同来自: iwtbafp
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自: iwtbafp