【问题标题】:elasticsearch : Avoid repetitive scoring when using ngram analyzerelasticsearch : 使用 ngram 分析器时避免重复评分
【发布时间】:2017-07-06 07:43:17
【问题描述】:

假设我搜索“hello”,当文档包含“hello”和“hello hello”时,我希望“hello”有更高的得分。

我正在使用 ngram 索引和搜索分析器。 (因为在其他情况下我真的需要这个)所以“hello hello”匹配了两次,因此显示为最高结果。有什么办法可以避免这种情况吗?我已经尝试过术语查询、匹配短语查询、多重匹配查询,它们的“hello hello”得分都更高。

【问题讨论】:

    标签: elasticsearch nest n-gram elasticsearch-analyzers


    【解决方案1】:

    我通过为文档添加一个重复的未分析(关键字)列并使用 bool 子句来提升术语查询来解决这个问题。

    var res = client.Search<MyClass>(s => s
      .Query(q => q
        .Bool(
            b1 => b1.Should(
                s1 =>s1
                .Term(m=>m
                    .Field(f => f._DUPLICATE_COLUMN)
                    .Value("hello")
                    .Boost(1)
                ),
    
                s1=>s1.Match(m => m
                .Field(f => f.MY_COLUMN)
                .Query("hello")
                .Analyzer("myNgramSearchAnalyzer")
                )
            )
            .MinimumShouldMatch(1)
        )
      )
    );
    

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多