未分析的分析字段查询

时间:2012-10-14 09:51:24

标签: elasticsearch

我有一些文件以ex分析形式存储品牌名称:{“name”:“Samsung”} {“name”:“Motion Systems”}。在某些情况下,我希望以“s”开头的术语搜索,这将导致两个文档。另一种情况,我只想要以“s”查询开头的完整字段,这导致只返回“samsung”。 我已经分析了名称字段并将其存储起来。有没有什么方法可以在弹性搜索中以查询开始完成整个字段?

1 个答案:

答案 0 :(得分:6)

您应该使用multi_field以两种不同的方式为您的字段编制索引。如果您按照已经标记的方式对其进行标记,则根据标记生成器生成的标记进行匹配。对于您想要的第二个匹配tye,您需要禁用分析字段并按原样索引,或使用产生相同结果的Keywork tokenizer。您的映射将如下所示:

{
    "your_type" : {
        "properties" : {
            "brand" : {
                "type" : "multi_field",
                "fields" : {
                    "brand" : {"type" : "string", "index" : "analyzed"},
                    "untouched" : {"type" : "string", "index" : "not_analyzed"}
                }
            }
        }
    }
}

然后您可以搜索这两个字段。当您在brand上搜索时,您会获得已有的匹配项,而在brand.untouched上搜索则会获得第二个匹配项。 有多种方法可以将多个查询组合在一起,您可以查看bool query上的实例。