0

我在过滤 Elastic Search 列表中的字段时遇到问题。我正在索引简单的 JSON 对象以进行搜索和过滤。

正在被索引的示例对象是:

{ 
    "id" : 1,
    "name" : "My Inventory",
    "description" : "This is a piece of inventory.",
    "sizes" : [ "big", "small" ],
    "geos" : [ { "country" : "US", "fullName" : "United States" } ]
}

我可以很容易地按 ID、名称、描述和大小进行过滤,但是在尝试按地理位置进行过滤时,我遇到了障碍。下面是我尝试使用的过滤器。我将不胜感激任何让我朝着正确方向前进的指针。谢谢!

curl -XPOST 'localhost:9200/stuff/inventory/_search?pretty=true' -d '
    {
        "fields" : [ "name" ],
        "filter" : {
            "terms" : { "geos.country" : [ "US" ] }
        }
    }
'
4

1 回答 1

0

默认情况下,会分析字符串字段(“分解为可搜索的术语”是Elasticsearch 文档的描述方式)。这不适用于术语过滤器,因为术语过滤器会进行精确匹配,但该字段将包含可能更改的版本。

"index" : "not_analyzed"您可以通过在映射中设置来告诉 Elasticsearch 不要这样做。您的 geos 字段映射应如下所示

"geos" : { 
    "type" : "object",
    "properties" : {
        "country" : { "type" : "string", "index" : "not_analyzed" },
        "fullName" : { "type" : "string" } 
    } 
}

您可能还想将 fullName 设置为not_analyzed,这取决于您将如何使用它。如果您想将其与术语查询或过滤器一起使用,则不应对其进行分析;如果要进行模糊匹配,拼写校正等,则应进行分析。

于 2013-10-18T15:01:01.593 回答