【问题标题】:Not analysed query on analysed field已分析字段上的未分析查询
【发布时间】:2012-10-14 19:08:02
【问题描述】:

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

【问题讨论】:

  • 我不知道人们如何投票,甚至不发表评论。可能是stackoverflow应该要求对downvoting进行强制性评论!

标签: elasticsearch


【解决方案1】:

您应该使用multi_field 以两种不同的方式索引您的字段。如果您像以前一样对其进行标记,则您将根据标记器生成的标记进行匹配。对于您想要的第二种匹配,您需要禁用分析字段并按原样索引它,或者使用产生相同结果的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多