使用Elasticutils查询Multi_Field

时间:2014-02-02 22:47:41

标签: django elasticsearch elasticutils

我在Elastic Search中为我的索引定义了一个multi_field类型的映射。

{
    'station': {
       "properties" :{
           'id': {'type': 'integer'},
           'call': {'type': 'multi_field', 
                    'fields' : {
                               'call': {'type': 'string', 'analyzer': 'whitespace'},
                               'raw': {'type': 'string', 'index': 'not_analyzed'}
                               }
                    }
        }
    }
}

我喜欢Mozilla的ElasticUltis,但我找不到查询multi_field字段的方法。

我本来期望的是:

myQuery = S.query(call_raw__wildcard="value")

有谁知道如何使用elasticutils查询multi_field字段?

2 个答案:

答案 0 :(得分:0)

首先,您的multi_field定义不正确。您应该在callraw的同一级别设置autocomplete主要字段。请参阅multi_field docs

然后,您可以将主字段查询为call,将原始字段查询为call.raw

答案 1 :(得分:0)

好的 - 我在multi_field文档中找到了解决方法(tnx @DrTech)。如果添加“path”:“just_name”,则可以在没有“call”前缀的情况下访问字段(在问题“call.raw”中)。然后映射看起来像这样:

{
'station': {
   "properties" :{
       'id': {'type': 'integer'},
       'call': {'type': 'multi_field', 
                'path' : 'just_name',
                'fields' : {
                           'call': {'type': 'string', 'analyzer': 'whitespace'},
                           'raw': {'type': 'string', 'index': 'not_analyzed'}
                           }
                }
    }
}

}

不幸的是,这只是一种解决方法。也许别人有更好的主意?