elasticsearch 弹性搜索高光,带复制到
我已使用以下映射创建索引:
elasticsearch 弹性搜索高光,带复制到,
elasticsearch,
elasticsearch,我已使用以下映射创建索引: PUT test { "mappings": { "documents": { "properties": { "name": { "type": "keyword" }, "fields": { "type": "nested",
PUT test
{
"mappings": {
"documents": {
"properties": {
"name": {
"type": "keyword"
},
"fields": {
"type": "nested",
"properties": {
"uid": {
"type": "keyword"
},
"value": {
"type": "text",
"copy_to": "fulltext"
}
}
},
"fulltext": {
"type": "text"
},
"locale": {
"type": "keyword"
},
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"url": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
}
我在其中添加了以下两个文件:
POST test/documents/10
{
"title":"java",
"url":"/java",
"name":"two",
"locale":"en-us",
"fields":[{
"uid":"group.name",
"value":"my demo"
},{
"uid":"group.last",
"value":"test"
}]
}
POST test/documents/11
{
"title":"php",
"url":"/php",
"name":"one",
"locale":"en-us",
"fields":[{
"uid":"group.name",
"value":"demo"
},{
"uid":"group.last",
"value":"test"
}]
}
并使用以下查询搜索结果:
GET test/_search
{
"size": 10,
"query": {
"bool": {
"must": [{
"simple_query_string": {
"query": "my",
"fields": ["title^6", "url^4", "fulltext"]
}
}, {
"terms": {
"locale": ["en-us"]
}
}, {
"terms": {
"name": ["one","two"]
}
}]
}
},
"highlight": {
"pre_tags": ["<b>"],
"post_tags": ["</b>"],
"fields": {
"*": {}
}
}
}
获取测试/\u搜索
{
“尺寸”:10,
“查询”:{
“布尔”:{
“必须”:[{
“简单查询字符串”:{
“查询”:“我的”,
“字段”:[“标题^6”、“url ^4”、“全文”]
}
}, {
“条款”:{
“区域设置”:[“en-us”]
}
}, {
“条款”:{
“名称”:[“一”、“二”]
}
}]
}
},
“亮点”:{
“pre_标记”:[“”],
“post_标记”:[“”],
“字段”:{
"*": {}
}
}
}
并得到如下结果:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 2.287682,
"hits": [
{
"_index": "test",
"_type": "documents",
"_id": "10",
"_score": 2.287682,
"_source": {
"title": "java",
"url": "/java",
"name": "two",
"locale": "en-us",
"fields": [
{
"uid": "group.name",
"value": "my demo"
},
{
"uid": "group.last",
"value": "test"
}
]
},
"highlight": {
"name": [
"<b>two</b>"
],
"locale": [
"<b>en-us</b>"
]
}
}
]
}
}
{
“take”:7,
“超时”:false,
“_碎片”:{
“总数”:5,
“成功”:5,
“跳过”:0,
“失败”:0
},
“点击次数”:{
“总数”:1,
“最高分数”:2.287682,
“点击次数”:[
{
“_索引”:“测试”,
“_类型”:“文档”,
“_id”:“10”,
“_分数”:2.287682,
“_来源”:{
“标题”:“java”,
“url”:“/java”,
“姓名”:“两个”,
“区域设置”:“en us”,
“字段”:[
{
“uid”:“group.name”,
“值”:“我的演示”
},
{
“uid”:“group.last”,
“值”:“测试”
}
]
},
“亮点”:{
“姓名”:[
“两个”
],
“区域设置”:[
“恩我们”
]
}
}
]
}
}
上面突出显示名称和区域设置部分的响应。我不想突出显示名称和区域设置,我只想突出显示我正在搜索的文本(这里是我的单词)
如何从突出显示中删除名称和区域设置并突出显示实际单词(这里是“我的”)
请帮我解释一下?查询的问题如下-简单查询字符串具有特殊语法。在您的例子中,当它是
my
时,意味着它是should
子句,这意味着匹配不需要它。这就是为什么此my
值没有突出显示的原因。您需要更改查询或在my
之前放置+
,以使此匹配成为必需的
对于查询中不希望在突出显示中看到的其他部分,可以指定要突出显示的字段,而不是
"fields": {
"*": {}
}
你可以有你想要的字段——在你的例子中,我假设它是
标题、url、全文。查看查看它只需说highlight,不要在字段内用“*”突出显示所有内容
此外,如果你只需要1/0作为搜索中的分数,我建议在过滤器中添加你的术语搜索
GET test/_search
{
"size": 10,
"query": {
"bool": {
"must": [
{
"simple_query_string": {
"query": "my",
"fields": [
"title^6",
"url^4",
"fulltext"
]
}
}
],
"filter": [
{
"terms": {
"locale": [
"en-us"
]
}
},
{
"terms": {
"name": [
"one",
"two"
]
}
}
]
}
},
"highlight": {
"pre_tags": [
"<b>"
],
"post_tags": [
"</b>"
],
"fields": {
"name": {},
"title":{},
"url": {},
"fulltext": {}
}
}
}
获取测试/\u搜索
{
“尺寸”:10,
“查询”:{
“布尔”:{
“必须”:[
{
“简单查询字符串”:{
“查询”:“我的”,
“字段”:[
“标题^6”,
“url^4”,
“全文”
]
}
}
],
“过滤器”:[
{
“条款”:{
“区域设置”:[
“恩我们”
]
}
},
{
“条款”:{
“姓名”:[
“一个”,
“两个”
]
}
}
]
}
},
“亮点”:{
“pre_标签”:[
""
],
“post_标签”:[
""
],
“字段”:{
“名称”:{},
“标题”:{},
“url”:{},
“全文”:{}
}
}
}
但您可以按区域设置和名称进行搜索,这就是为什么它们也会突出显示的原因。有没有办法将其从搜索中删除并突出显示确切的单词?此处还突出显示未显示搜索文本(此处我正在搜索单词“我的”)