Elasticsearch嵌套短语搜索

Elasticsearch嵌套短语搜索,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我应该使用什么方法才能让我的查询返回一个输入短语中文本中至少包含2个关键字的命中率 例如,如果输入“hello friend”我希望返回结果包含文本中“hello”和“friend”的文档。如果输入“你好,好朋友”,我想在文本中输入3个关键字中的2个。或者,至少最佳组合的结果是最好的。 如果我使用下面的代码,我得到的结果是“hello”或“friend”,但不是两者都有 var searchResults=client.Search(s=>s .类型(“螺纹”) .从(0) .尺寸(100) .

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

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

var searchResults=client.Search(s=>s
.类型(“螺纹”)
.从(0)
.尺寸(100)
.Query(q=>q
.Match(qs=>qs
.OnField(p=>p.Posttext)
.Query(“你好,朋友”)
)
)
.突出显示(h=>h
.OnFields(
f=>f.OnField(“posttext”).PreTags(“”).PostTags(“”).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)
                )
            )
        );
var searchResults=client.Search(s=>s
.类型(“螺纹”)
.从(0)
.尺寸(100)
.Query(q=>q
.Match(qs=>qs
.OnField(p=>p.Posttext)
.Query(“你好”)
)
&&
q、 匹配(qs=>qs
.OnField(p=>p.Posttext)
.Query(“朋友”)
)
)
.突出显示(h=>h
.OnFields(
f=>f.OnField(“posttext”).PreTags(“”).PostTags(“”).FragmentSize(150)
)
)
);
我想我错过了什么。请帮忙


提前感谢。

您需要使用短语查询

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

如果你仔细阅读上面的文章,我想你能找到你问题的方向


PS:我知道elasticsearch的javascript

我发现在我的情况下,添加.Operator(Operator.And)来匹配查询是有效的。但是我需要对短语搜索进行更多的研究。

Ok..运算符的工作方式与短语类似,但它们意味着文档必须同时包含这两个术语。。但是,如果使用or运算符,则任何术语都可以。。
        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)
                )
            )
        );