我需要将section.text=2525 and section.type_id=3
然后请求并获得结果计数2的查询字符串和术语查询结合起来,但结果必须仅为1(id = 7)。相同的section
必须具有25的text
和具有3的type_id
,但是它获得的topics
具有2525的section.text
和具有3的section.type_id
。救命。下面有示例:
创建索引:
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": {
"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" : { }
}
}
}
GET testix/_search
{
"query": {
"query_string" : {
"query" : "(section.text:2525 AND section.type_id:3)"
}
},
"highlight" : {
"pre_tags" : [
"<mark>"
],
"post_tags" : [
"</mark>"
],
"fragment_size" : 50,
"number_of_fragments" : 3,
"fragmenter" : "simple",
"fields" : {
"section.text" : { }
}
}
}
http://localhost:9200/testix/_search?q=(section.text:2525 AND section.type_id:3)
但是结果:
{
"_index": "testix",
"_type": "topic",
"_id": "AWVCeAmZpXk_CuwTJ8K1",
"_score": 1.0631888,
"_source": {
"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. "
}
]
},
"highlight": {
"section.text": [
" et dolore magna aliqua. <mark>2525</mark>"
]
}
},
{
"_index": "testix",
"_type": "topic",
"_id": "AWVCd9yppXk_CuwTJ8K0",
"_score": 0.5235683,
"_source": {
"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"
}
]
},
"highlight": {
"section.text": [
". Odio eu feugiat pretium nibh. <mark>2525</mark>"
]
}
}
所需结果:
{
"_index": "testix",
"_type": "topic",
"_id": "AWVCeAmZpXk_CuwTJ8K1",
"_score": 1.0631888,
"_source": {
"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. "
}
]
},
"highlight": {
"section.text": [
" et dolore magna aliqua. <mark>2525</mark>"
]
}
}
答案 0 :(得分:1)
您可以尝试使用nested mapping和nested query。
首先使用自定义映射创建索引:
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": {}
}
}
}