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