与Elasticsearch中的字段完全匹配

时间:2013-10-31 14:26:22

标签: elasticsearch

在我正在编制索引的每个文档中,我都有一个名为“永久链接”的字段,我想与之完全匹配。

示例文档:

{
    "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"
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

你所描述的是正确的。

我测试过,它按预期工作。所以你的索引可能有些问题。也许你在设置映射之前索引了文档?
尝试再做一次 -
删除索引或创建新索引 用你的映射做一个putMapping 索引文件。

搜索应该按预期工作。