text字段排序, 要么开fieldData,要么用keyword
排序
相关性评分排序
默认情况下,返回的结果是按照相关性进行排序的——最相关的文档排在最前
为在 Elasticsearch 中, 相关性得分由一个浮点数进行表示,并在搜索结果中通过 _score 参数返回, 默认排序是 _score 降序,按照相关性评分升序排序如下
# 会把相关性得分高的排在前面
POST /book/_search
{
"query": {
"match": {
"description": "solr"
}
}
}
# 把得分高的放后面
POST /book/_search
{
"query": {
"match": {
"description": "solr"
}
},
"sort": [
{
"_score": {
"order": "asc"
}
}
]
}
字段值排序
# 按照字段的值进行排序
POST /book/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
多级排序
假定我们想要结合使用 price和 timestamp(得分) 进行查询,并且匹配的结果首先按照价格排序, 然后按照timestamp得分排序:
POST /book/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
},
{
"timestamp": {
"order": "desc"
}
}
]
}
搜索结果高亮
fields是指定对那个字段高亮.
返回的结果有highlight
在使用match查询的同时,加上一个highlight属性:
- pre_tags:前置标签
- post_tags:后置标签
fields:需要高亮的字段
- name:这里声明title字段需要高亮,后面可以为这个字段设置特有配置,也可以空
```json
把 elasticsearch高亮展示
POST /book/_search { “query”: { “match”: {
"name": "elasticsearch"
} }, “highlight”: { “pre_tags”: ““, “post_tags”: ““, “fields”: [
{ "name": {} }
] } }
对两个字段高亮
POST /book/_search { “query”: { “match”: { “name”: “elasticsearch” } }, “highlight”: { “pre_tags”: ““, “post_tags”: ““, “fields”: [ { “name”: {} }, { “description”: {} } ] } }
POST /book/_search { “query”: { “query_string”: { “query”: “elasticsearch” } }, “highlight”: { “pre_tags”: ““, “post_tags”: ““, “fields”: [ { “name”: {} }, { “description”: {} } ] } } ```