【发布时间】:2019-05-12 13:18:40
【问题描述】:
我正在努力实现这个目标:
- 通过布尔查询过滤掉结果,例如“status=1”
- 通过布尔范围查询过滤掉结果,例如“discance: gte 10 AND lte 60”
- 通过匹配 int 数组中的至少一个 int 值过滤掉结果
- 通过计算文档分数在多个字段中搜索单词。有些字段需要通配符,有些需要提升,例如 importantfield^2, somefield*, someotherfield^0.75
- 以上所有点均由 AND 运算符连接。用 OR 运算符将所有术语单点连接。
现在我写了这样的东西,但是通配符不起作用。搜索“abc”在“名称”字段中找不到“abcd”。 如何解决?
{
"filtered": {
"query": {
"multi_match": {
"query": "John Doe",
"fields": [
"*name*^1.75",
"someObject.name",
"tagsArray",
"*description*",
"ownerName"
]
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"status": 2
}
},
{
"bool": {
"should": [
{
"term": {
"someIntsArray": 1
}
},
{
"term": {
"someIntsArray": 5
}
}
]
}
},
{
"range": {
"distanceA": {
"lte": 100
}
}
},
{
"range": {
"distanceB": {
"gte": 50,
"lte": 100
}
}
}
]
}
}
}
}
映射:
{
"documentId": {
"type": "integer"
},
"ownerName": {
"type": "string",
"index": "not_analyzed"
},
"description": {
"type": "string"
},
"status": {
"type": "byte"
},
"distanceA": {
"type": "short"
},
"createdAt": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"distanceB": {
"type": "short"
},
"someObject": {
"properties": {
"someObject_id": {
"type": "integer"
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
},
"someIntsArray": {
"type": "integer"
},
"tags": {
"type": "string",
"index": "not_analyzed"
}
}
【问题讨论】:
-
请加入您的映射。
-
对不起,我忘了。
标签: elasticsearch