我使用elasticsearch进行日志记录。我有一个名为" query_index"的索引。有四个内部领域。我使用以下映射来创建此索引:
POST
/query_index/queries
{
"mappings": {
"queries": {
"properties": {
"query": {
"type": "string",
"store": true
},
"exact_match":{
"type":"string",
"index":"not_analyzed"
},
"search_type": {
"type" : "string",
"store": true
},
"search_engine": {
"type" : "string",
"store": true
}
}
}
}
}
当你看到第二个字段时,我把" exact_match"作为not_analyzed
字段,以便检索完全匹配的查询。
我们说我在这个索引中持有两个文件:
{
"query": "Barack Obama",
"exact_match": "Barack Obama",
"search_engine": "google",
"search_type": "api"
}
{
"query": "Barack",
"exact_match": "Barack",
"search_engine": "google",
"search_type": "api"
}
现在我想只检索第二个文档。所以我使用以下查询:
Post
/query_index/queries/_search
{"query":
{"bool":
{"must":
[
{ "match": { "exact_match": "Barack" }},
{ "match": { "search_engine": "google" }},
{ "match": { "search_type": "api" }}
]
}
}
}
但是在运行上述查询之后,我会检索这两个文档,而我希望检索第二个文档。我几乎搜索了整个Stack,但是我没有得到我应该做的结果。
更新
GET
/query_index/_mapping
{
"query_index": {
"mappings": {
"queries": {
"properties": {
"exact_match": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"mappings": {
"properties": {
"queries": {
"properties": {
"properties": {
"properties": {
"exact_match": {
"properties": {
"index": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"query": {
"properties": {
"store": {
"type": "boolean"
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"search_engine": {
"properties": {
"store": {
"type": "boolean"
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"search_type": {
"properties": {
"store": {
"type": "boolean"
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
}
},
"query": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"search_engine": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"search_type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
答案 0 :(得分:1)
具有该特定映射的正确索引创建命令是PUT
而不是POST
。使用POST
,您只需在该索引中创建一个文档,该文档将自动在索引中创建一些字段结构。
使用此特定映射创建索引的正确命令是:
PUT /query_index
{
"mappings": {
"queries": {
"properties": {
"query": {
"type": "string",
"store": true
},
"exact_match": {
"type": "string",
"index": "not_analyzed"
},
"search_type": {
"type": "string",
"store": true
},
"search_engine": {
"type": "string",
"store": true
}
}
}
}
}