0

在我索引的每个文档中,我都有一个名为“permalink”的字段,我想对其进行精确匹配。

示例文档:

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

1 回答 1

2

你所描述的是正确的。

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

搜索应该按预期工作。

于 2013-10-31T14:39:56.023 回答