说我有一个领域' spicey'具有可能的价值观' hot',' hotter','吸烟'
这些价值观具有内在的特征:它们是正常的。
我希望能够使用其内在顺序对它们进行排序或过滤。例如:给我所有文件,其中spicey>热。
当然,我可以将值转换为整数0,1,2,但这需要在索引和查询方面进行额外的内务管理,而我应该避免这样做。
这有可能吗?已经考虑过使用多字段映射,但不确定这是否对我有帮助。
答案 0 :(得分:3)
您可以通过编写排序操作脚本对字符串值进行排序,以便为每个spicey字符串设置特定的字段值。
curl -XGET 'http://localhost:9200/yourindex/yourtype/_search' -d
{
"sort": {
"_script": {
"script": "factor.get(doc[\"spicey\"].value)",
"type": "number",
"params": {
"factor": {
"hot": 0,
"hotter": 1,
"smoking": 2
}
},
"order": "asc"
}
}
}
答案 1 :(得分:2)
一种解决方案可能是为spice级别创建一个特定的分析器。我们的想法是将每个级别映射到离散值,这会增加香料的辛辣度。
{
"settings": {
"analysis": {
"char_filter": {
"spices": {
"type": "mapping",
"mappings": [
"mild=>1",
"hot=>2",
"hotter=>3",
"smoking=>4"
]
}
},
"analyzer": {
"spice_synonyms": {
"type": "custom",
"char_filter": "spices",
"tokenizer": "standard",
"filter": [
"standard"
]
}
}
}
},
"mappings": {
"ordinal": {
"properties": {
"spicy": {
"type": "string",
"fields": {
"level": {
"type": "string",
"analyzer": "spice_synonyms"
}
}
}
}
}
}
}
在上述索引设置和映射中,spicy
字段将包含普通英语单词(hot
,mild
等),而spicy.level
字段将包含离散值,然后您可以在查询和排序中使用。
例如,检索spice级别严格大于hot
并按降序排序(先吸烟)的文档可以这样做:
{
"sort": {
"spicy.level": "desc"
},
"query": {
"query_string": {
"query": "spicy.level:>2"
}
}
}
或range
查询也可以使用
{
"sort": {
"spicy.level": "desc"
},
"query": {
"range": {
"spicy.level" {
"gt": 2
}
}
}
}