【问题标题】:How to do Phrase search in Elastic search?如何在弹性搜索中进行短语搜索?
【发布时间】:2012-10-26 06:24:46
【问题描述】:

我正在使用 Elastic 搜索,但无法对应用了自定义分析器的属性进行短语搜索

自定义分析器被提及为:

"settings" : {
        "analysis.analyzer.string_lowercase.type" : "custom",
        "analysis.analyzer.string_lowercase.tokenizer" : "keyword",
        "analysis.analyzer.string_lowercase.filter" : "lowercase"
}

属性值类似于:“入水坑,出水坑”,或者可以是任何字符串。

我尝试过使用以下方法:

1) **(Not worked)** QueryBuilders.queryString("*into the puddle*").autoGeneratePhraseQueries(true).defaultOperator(Operator.AND);

2) **(Not worked)** QueryBuilders.matchPhraseQuery(attribute, "into the puddle");

3) **(Not worked)** QueryBuilders.queryString("*into the puddle*").autoGeneratePhraseQueries(true).defaultOperator(Operator.AND).analyzeWildcard(true);

但是,幸运的是,尝试 1 可以很好地处理嵌套对象。

FilterBuilders.nestedFilter(attribute, queryString("*into the puddle*").field(attribute)
                                .defaultOperator(Operator.AND).analyzeWildcard(true));

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    1) - 3) 似乎缺少一个字段,因此正在搜索 _all 字段,我猜它是使用标准分析器索引的。

    【讨论】:

    • 嗨,Imotov,即使在查询中明确提到了标准分析器。它不会给出任何结果。
    • 将分析器应用于查询将无济于事,因为您的字段被索引为单个标记,并且标准分析器将查询拆分为多个标记,这确实减少了找到任何内容的机会。如果要使用短语和标准分析器,请在索引期间切换到标准分析器。如果您需要关键字分析器,请改用通配符查询。或者更好的是看看 ngrams stackoverflow.com/a/6471449/783043 前导通配符在大型索引上可能真的有问题。
    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多