0

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

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

4

1 回答 1

0

我通过为文档添加一个重复的未分析(关键字)列并使用 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)
    )
  )
);
于 2017-07-06T21:32:47.043 回答