text字段排序, 要么开fieldData,要么用keyword

排序

相关性评分排序

默认情况下,返回的结果是按照相关性进行排序的——最相关的文档排在最前

为在 Elasticsearch 中, 相关性得分由一个浮点数进行表示,并在搜索结果中通过 _score 参数返回, 默认排序是 _score 降序,按照相关性评分升序排序如下

  1. # 会把相关性得分高的排在前面
  2. POST /book/_search
  3. {
  4. "query": {
  5. "match": {
  6. "description": "solr"
  7. }
  8. }
  9. }
  10. # 把得分高的放后面
  11. POST /book/_search
  12. {
  13. "query": {
  14. "match": {
  15. "description": "solr"
  16. }
  17. },
  18. "sort": [
  19. {
  20. "_score": {
  21. "order": "asc"
  22. }
  23. }
  24. ]
  25. }

字段值排序

  1. # 按照字段的值进行排序
  2. POST /book/_search
  3. {
  4. "query": {
  5. "match_all": {}
  6. },
  7. "sort": [
  8. {
  9. "price": {
  10. "order": "desc"
  11. }
  12. }
  13. ]
  14. }

多级排序

假定我们想要结合使用 price和 timestamp(得分) 进行查询,并且匹配的结果首先按照价格排序, 然后按照timestamp得分排序:

  1. POST /book/_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "sort": [
  7. {
  8. "price": {
  9. "order": "desc"
  10. }
  11. },
  12. {
  13. "timestamp": {
  14. "order": "desc"
  15. }
  16. }
  17. ]
  18. }

搜索结果高亮

fields是指定对那个字段高亮.
返回的结果有highlight

在使用match查询的同时,加上一个highlight属性:

  • pre_tags:前置标签
  • post_tags:后置标签
  • fields:需要高亮的字段

    1. - 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”: {} } ] } } ```