elasticsearch - ElasticSearch 按短语位置排序
问题描述
我有一个优先级提升的查询,查询工作正常,但结果未排序
{
"query": {
"bool": {
"should": [
{
"bool": {
"should": [
{
"prefix": {
"subitem.keyword": "i love dogs"
}
}
],
"boost": 100
}
},
{
"bool": {
"should": [
{
"match": {
"subitem": {
"query": "i love dogs",
"operator": "AND"
}
}
}
],
"boost": 10
}
},
{
"bool": {
"should": [
{
"match_phrase": {
"subitem": "i love dogs"
}
}
],
"boost": 30
}
}
]
}
},
"size": 30
}
搜索设置:
我使用波斯分析器和自定义规范器
"analysis" => [
"normalizer" => [
"my_normalizer" => [
"filter" => [
"lowercase"
],
"type" => "custom"
]
],
"char_filter"=> [
"zero_width_spaces"=> [
"type"=> "mapping",
"mappings"=> [ "\\u200C=> "]
]
],
"filter"=> [
"persian_stop"=> [
"type"=> "stop",
"stopwords"=> "_persian_"
],
],
"analyzer"=> [
"persian"=> [
"tokenizer" => "standard",
"char_filter"=> [ "zero_width_spaces" ],
"filter"=> [
"lowercase",
"arabic_normalization",
"persian_normalization",
"persian_stop",
]
],
]
]
在关键字字段上使用规范器搜索映射并键入关键字
"whole_name_fa" => [
'type' => 'text',
'analyzer' => 'persian',
"fields" => [
"keyword" => [
"type" => "keyword",
"ignore_above" => 256,
"normalizer" => "my_normalizer"
]
]
],
我想按短语的位置对结果进行排序
例如,结果中的“我爱狗”必须按如下排序:
i love dogs
i love dogs and cats
cats goods and i love dogs and birds
cats goods birds goods i love dogs
解决方案
推荐阅读
- c++ - 如何将垂直滚动条添加到全屏 win32 控制台?
- javascript - 拖放 Javascript if 语句问题
- css - 使用 CSS Grid 居中响应式项目
- java - Netbeans中未使用的查找变量的快捷方式是什么?
- typescript - mongoose 中的克隆查询
- c++ - 将返回的堆栈对象分配给引用变量
- excel - 当值匹配时,Excel 查找上一个/上一个值
- php - php函数在固定位置分隔字符串
- python - 如何在不覆盖的情况下将具有多个字典的值列表的键解包到列表中?
- android - ScrollView 没有在 Android 中的 XML 中完全向下滚动