我有以下数据:
[
{
DocumentId": "85",
"figureText": "General Seat Assembly - DBL",
"descriptionShort": "Seat Assembly - DBL",
"partNumber": "1012626-001FG05",
"itemNumeric": "5"
},
{
DocumentId": "85",
"figureText": "General Seat Assembly - DBL",
"descriptionShort": "Seat Assembly - DBL",
"partNumber": "1012626-001FG05",
"itemNumeric": "45"
}
]
我使用以下查询获取数据:
{
"query": {
"bool": {
"must": {
"match": {
"DocumentId": "85"
}
},
"should": [
{
"match": {
"figureText": {
"boost": 5,
"query": "General Seat Assembly - DBL",
"operator": "or"
}
}
},
{
"match": {
"descriptionShort": {
"boost": 4,
"query": "Seat Assembly - DBL",
"operator": "or"
}
}
},
{
"term": {
"partNumber": {
"boost": 1,
"value": "1012626-001FG05"
}
}
}
]
}
}
}
当前,它将返回带有“ itemNumeric” = 45的项目,我想获得itemNumeric =“ 5”(最低)。
是否存在执行此操作的提示?我尝试使用“ sort”:[{“ itemNumeric”:“ desc”}]
Thx
答案 0 :(得分:0)
查看您的评论,您可以通过两种方式解决此问题。
解决方案1::更新映射,以便您的查询现在可以按预期运行
FirebaseAnimatedList(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true, ...)
解决方案2::如果动态创建了映射,则检查PUT my_index/_mapping/_doc
{
"properties": {
"itemNumeric": {
"type": "text",
"fielddata": true
}
}
}
字段的映射,您的itemNumeric字段将是多字段。
itemNumeric
在这种情况下,您可以将排序逻辑应用于"itemNumeric": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
字段。
itemNumeric.keyword
在elasticsearch中,每当有文本数据时,总是建议为其创建两个字段。类型为"sort":[{"itemNumeric.keyword":"desc"}]
的一种,以便您可以应用全文查询,而类型为text
的另一种,则可以使用if实现排序或任何聚合操作。
不建议使用解决方案1,因为ES官方文档中提到了以下原因
默认情况下,
keyword
在文本字段上处于禁用状态。将Fielddata
设置为 [your_field_name]为了通过反转将字段数据加载到内存中 倒排索引。fielddata=true
。
我建议阅读有关multi-field和fielddata的信息,以便您更清楚地了解正在发生的事情。