0

我应该使用什么方法来让我的查询从输入短语的文本中返回至少包含 2 个关键字的命中。

例如,如果输入“你好朋友”,我希望返回结果包含文本中某处“你好”和“朋友”的文档。如果输入“你好,好朋友”,我想要文本中 3 个关键字中的 2 个的结果。或者至少具有最佳组合的结果排在首位。如果我使用下面这样的代码,我会得到“你好”或“朋友”但不是两者都有的结果。

        var searchResults = client.Search<Thread>(s => s
        .Type("threads")
        .From(0)
        .Size(100)
        .Query(q => q
            .Match(qs => qs
                .OnField(p => p.Posttext)
                .Query("hello friend")
                )
            )
            .Highlight(h => h
            .OnFields(
                f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150)
                )
            )
        );

我可以通过像这样的代码得到我想要的结果,但它不灵活,因为短语可以包含任意数量的单词。

        var searchResults = client.Search<Thread>(s => s
        .Type("threads")
        .From(0)
        .Size(100)
        .Query(q => q
            .Match(qs => qs
                .OnField(p => p.Posttext)
                .Query("hello")
                )
                &&
                q.Match(qs => qs
                .OnField(p => p.Posttext)
                .Query("friend")
                )
            )
            .Highlight(h => h
            .OnFields(
                f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150)
                )
            )
        );

我想我错过了一些东西。请帮忙。

提前致谢。

4

2 回答 2

0

你需要使用短语查询..

在匹配中,您需要将类型指定为短语 ..

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html#query-dsl-match-query-phrase

如果您阅读上面的文章,我想您可以找到问题的方向..

PS:我知道用于 javascript 的弹性搜索...

于 2015-12-25T06:57:30.577 回答
0

我发现将 .Operator(Operator.And) 添加到 Match 查询在我的情况下有效。但我需要对短语搜索进行更多调查。

于 2015-12-25T19:35:21.080 回答