在我正在编制索引的每个文档中,我都有一个名为“永久链接”的字段,我想与之完全匹配。
示例文档:
{
"entity_type": "company",
"entity_id": 1383221763,
"company_type": "developer",
"name": "Runewaker Entertainment",
"permalink": "runewaker-entertainment"
}
这些文件的映射是:
{
"properties": {
"entity_id": {
"type": "integer",
"include_in_all": false
},
"name": {
"type": "string",
"include_in_all": true,
},
"permalink": {
"type": "string",
"include_in_all": true,
"index": "not_analyzed"
},
"company_type": {
"type": "string",
"include_in_all": false,
"index": "not_analyzed"
}
}
}
当我运行以下查询时,我没有得到任何点击:
POST /companies/company/_search HTTP/1.1
Host: localhost:8082
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": { "permalink": "runewaker-entertainment" }
}
}
}
}
但我与此查询匹配:
POST /companies/company/_search HTTP/1.1
Host: localhost:8082
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": { "permalink": "runewaker" }
}
}
}
}
看来任何带有连字符的固定链接都会导致查询失败,但我的印象是如果属性的映射将索引设置为not_analyzed
,那么ElasticSearch根本不会分析该字段
正确的查询应该是什么?
谢谢
更新
公司索引的getMapping结果:
{
"companies" : {
"company" : {
"properties" : {
"company_type" : {
"type" : "string"
},
"entity_id" : {
"type" : "long"
},
"entity_type" : {
"type" : "string"
},
"name" : {
"type" : "string"
},
"node_id" : {
"type" : "long"
},
"permalink" : {
"type" : "string"
}
}
}
}
}
答案 0 :(得分:2)
你所描述的是正确的。
我测试过,它按预期工作。所以你的索引可能有些问题。也许你在设置映射之前索引了文档?
尝试再做一次 -
删除索引或创建新索引
用你的映射做一个putMapping
索引文件。
搜索应该按预期工作。