如何使用查询dsl或java api突出显示Elasticsearch中的嵌套字段?

时间:2019-02-21 19:20:03

标签: elasticsearch elasticsearch-dsl elasticsearch-java-api

我可以使用嵌套查询获得嵌套字段的结果,但是使用以下查询无法获得嵌套字段的突出显示结果。它只能突出显示普通字段。有什么办法吗?我还需要Java API。使用Elasticsearch 5.4.1

有带有嵌套字段的样本索引图:

PUT testix
{
  "mappings": {
    "topic": {
      "properties": {
        "section": {
          "type": "nested"
        }
      }
    }
  }
}

示例文档:

POST testix/topic/
{
  "id" : "5",
  "name" : "Document APIs",
  "section": [
    {
      "id" : "11",
      "topic_id" : "5",
      "type_id" : "3",
      "text" : "Semper feugiat nibh sed pulvinar. Diam vulputate ut pharetra sit amet aliquam id. Nunc consequat interdum varius sit amet mattis vulputate."
    },
    {
      "id" : "12",
      "topic_id" : "5",
      "type_id" : "2",
      "text" : "Ipsum faucibus vitae aliquet nec ullamcorper sit. Odio eu feugiat pretium nibh. 2525"
    }
  ]
}

POST testix/topic/
{
  "id" : "7",
  "name" : "Search APIs",
  "section": [
    {
      "id" : "15",
      "topic_id" : "7",
      "type_id" : "3",
      "text" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 2525"
    },
    {
      "id" : "16",
      "topic_id" : "7",
      "type_id" : "2",
      "text" : "Nam at lectus urna duis convallis convallis tellus id interdum. Bibendum arcu vitae elementum curabitur vitae nunc sed velit dignissim. Blandit massa enim nec dui nunc mattis enim ut. "
    },
    {
      "id" : "17",
      "topic_id" : "7",
      "type_id" : "6",
      "text" : "Sodales ut etiam sit amet nisl purus in. Laoreet non curabitur gravida arcu ac tortor dignissim. "
    }
  ]
}

POST testix/topic/
{
  "id" : "9",
  "name" : "Request Body Search",
  "section": [
    {
      "id" : "3",
      "topic_id" : "9",
      "type_id" : "1",
      "text" : "Et malesuada fames ac turpis egestas maecenas pharetra convallis. Consectetur purus ut faucibus pulvinar elementum integer enim neque. Lorem sed risus ultricies tristique."
    },
    {
      "id" : "4",
      "topic_id" : "9",
      "type_id" : "2",
      "text" : "Egestas diam in arcu cursus. 2525 Tellus integer feugiat scelerisque varius morbi enim nunc faucibus."
    },
    {
      "id" : "5",
      "topic_id" : "9",
      "type_id" : "4",
      "text" : "At consectetur lorem donec massa. Eu augue ut lectus arcu bibendum at varius vel pharetra."
    }
  ]
}

POST testix/topic/
{
  "id" : "19",
  "name" : "Request Body Search",
  "section": [
    {
      "id" : "13",
      "topic_id" : "19",
      "type_id" : "1",
      "text" : "Egestas diam in arcu cursus. Tellus integer feugiat scelerisque varius morbi enim nunc faucibus."
    },
    {
      "id" : "15",
      "topic_id" : "19",
      "type_id" : "4",
      "text" : "Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi. "
    }
  ]
}

并查询结果:

GET testix/_search
{
  "query": {
    "nested": {
      "path": "section",
      "query": {
        "bool": {
          "must": [
            {
              "query_string": {
                "query": "section.text:2525",
                "fields": [
                  "section.text^2.0"
                ]
              }
            },
            {
              "terms": {
                "section.type_id": ["3"]
              }
            }
          ]
        }
      }
    }
  },
  "highlight": {
    "pre_tags": [
      "<mark>"
    ],
    "post_tags": [
      "</mark>"
    ],
    "fragment_size": 50,
    "number_of_fragments": 3,
    "fragmenter": "simple",
    "fields": {
      "section.text": {}
    }
  }
}

0 个答案:

没有答案