elasticsearch:使用ngram分析器时避免重复评分

时间:2017-07-06 07:43:18

标签: elasticsearch nest n-gram elasticsearch-analyzers

假设我搜索"你好"当文件包含"你好"并且"你好你好"我想要"你好"获得更高的得分。

我正在使用ngram索引和搜索分析器。 (因为我真的需要这个用于其他场景)所以"你好你好"匹配两次,因此显示为最佳结果。有什么方法可以避免这种情况吗?我已经尝试了术语查询,匹配词组查询,多匹配查询所有这些得分"你好你好"更高。

1 个答案:

答案 0 :(得分: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)
    )
  )
);