Elasticsearch NEST - 词组搜索

时间:2015-12-25 05:41:18

标签: elasticsearch nest elasticsearch-net

我应该使用哪些方法来使我的查询返回输入短语中文本中至少包含2个关键字的匹配。

  

例如,如果输入" 你好朋友"我希望返回结果包含" hello "和" 朋友"在文本的某个地方。如果输入" 你好朋友"我希望结果中的2个关键字在文本中。或者至少有最佳组合的结果。   如果我使用下面的代码,我得到的结果是"你好"或者"朋友"但不是两个。

"{\"match_all\": {},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }}"
     ^                 ^
     |                 |
this is valid        this is NOT valid

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

        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)
                )
            )
        );

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

提前致谢。

2 个答案:

答案 0 :(得分:0)

你需要使用短语查询..

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

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

如果您浏览上述文章,我猜您可以找到问题的方向..

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

答案 1 :(得分:0)

我发现将.Operator(Operator.And)添加到Match查询可以解决我的问题。但我需要对短语搜索进行更多调查。