4

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

4

1 回答 1

6

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

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

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

于 2012-10-14T11:08:02.910 回答