我很难理解如何突出工作。 我的查询正在返回该项目,但我没有看到会导致突出显示的标记。
以下是测试索引的设置:
curl -XPUT 'http://localhost:9200/testfoo' -d '{
"mappings": {
"entry": {
"properties": {
"id": { "type": "integer" },
"owner": { "type": "string" },
"target": {
"properties": {
"id": { "type": "integer" },
"type": {
"type": "string",
"index": "not_analyzed"
}
}
},
"body": { "type": "string" },
"body_plain": { "type": "string"}
}
}
}
}'
以下是几个插入的文档:
curl -XPUT 'http://localhost:9200/testfoo/entry/1' -d'{
"id": 1,
"owner": "me",
"target": {
"type": "event",
"id": 100
},
"body": "<div>Message One has foobar in it</div>",
"body_plain": "Message One has foobar in it"
}'
curl -XPUT 'http://localhost:9200/testfoo/entry/2' -d'{
"id": 2,
"owner": "me",
"target": {
"type": "event",
"id": 200
},
"body": "<div>Message One has no bar in it</div>",
"body_plain": "Message One has no bar in it"
}'
简单搜索返回预期文档:
curl -XPOST 'http://localhost:9200/testfoo/_search?pretty' -d '{
"query": {
"simple_query_string": {
"query": "foobar"
}
}
}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.09492774,
"hits" : [ {
"_index" : "testfoo",
"_type" : "entry",
"_id" : "1",
"_score" : 0.09492774,
"_source" : {
"id" : 1,
"owner" : "me",
"target" : {
"type" : "event",
"id" : 100
},
"body" : "<div>Message One has foobar in it</div>",
"body_plain" : "Message One has foobar in it"
}
} ]
}
}
然而,当我添加“突出显示”时,我得到相同的JSON,但body_plain没有“突出显示”匹配的术语:
curl -XPOST 'http://localhost:9200/testfoo/_search?pretty' -d '{
"query":{
"query": {
"simple_query_string":{
"query":"foobar"
}
}
},
"highlight": {
"pre_tags": [ "<div class=\"highlight\">" ],
"post_tags": [ "</div>" ],
"fields": {
"_all": {
"fragment_size": 10,
"number_of_fragments": 1
}
}
},
"sort": [
"_score"
],
"_source": [ "target", "id", "body_plain", "body" ],
"min_score": 0.9,
"size":10
}'
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "testfoo",
"_type" : "entry",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"id" : 1,
"body" : "<div>Message One has foobar in it</div>",
"target" : {
"id" : 100,
"type" : "event"
},
"body_plain" : "Message One has foobar in it"
}
} ]
}
}
我期待body_plain看起来像
Message One has <div class="highlight">foobar</div> in it
想知道我做错了什么。感谢。
答案 0 :(得分:3)
为了执行突出显示,该字段的实际内容为 需要。如果存储了相关字段(将商店设置为true) 它将被使用,否则,实际的_source将被使用 已加载,相关字段将从中提取。
无法从_source中提取_all字段,因此它只能是 用于突出显示是否映射为将store设置为true。
您有两种方法可以解决这个问题。您可以更改映射以存储_all
字段:
{
"mappings": {
"entry": {
"_all": { <-- add this
"store": true
},
"properties": {
...
或者您将查询更改为:
curl -XPOST 'http://localhost:9200/testfoo/_search?pretty' -d '{
"query":{
"query": {
"simple_query_string":{
"query":"foobar"
}
}
},
"highlight": {
"pre_tags": [ "<div class=\"highlight\">" ],
"post_tags": [ "</div>" ],
"require_field_match": false, <-- add this
"fields": {
"*": { <-- use this
"fragment_size": 10,
"number_of_fragments": 1
}
}
},
"sort": [
"_score"
],
"_source": [ "target", "id", "body_plain", "body" ],
"min_score": 0.9,
"size":10
}'