我的问题是如何使用NEST(C#)在渗滤函数中使用多重匹配,倾斜和模糊性等搜索选项?
我想实现一个percolate函数,该函数返回与以下搜索函数完全相反的结果:
public List<string> search(string query){
.......
.......
var searchResponse = client.Search<Document>(s => s
.AllTypes()
.From(0)
.Take(10)
.Query(q => q // define query
.MultiMatch(mp => mp // of type MultiMatch
.Query(input.Trim())
.Fields(f => f // define fields to search against
.Fields(f3 => f3.doc_text))
.Slop(2)
.Operator(Operator.And)
.Fuzziness(Fuzziness.Auto))));
}
以下是我目前使用的过滤函数,但不知道如何包括多重匹配,倾斜和模糊选项。我在其文档中找不到有关此内容的详细信息。
var searchResponseDoc = client.Search<PercolatedQuery>(s => s
.Query(q => q
.Percolate(f => f
.Field(p => p.Query)
.DocumentType<Document>() //I have a class called Document
.Document(myDocument))) // myDocument is an object of type Document
谢谢。
最佳答案
首先,您要执行multi_match
查询,该查询具有所需的选项。在后者中,您执行percolator
查询。
如果您想两者都做,则可以使用二进制和按位运算符,例如
.Query(q =>
!q.MultiMatch(mp => mp
.Query(input.Trim())
.Fields(f => f.Fields(f3 => f3.doc_text))
.Slop(2)
.Operator(Operator.And)
.Fuzziness(Fuzziness.Auto)
)
&& q.Percolate(f => f
.Field(p => p.Query)
.DocumentType<Document>()
.Document(myDocument)
)
)
不能使用
&&
创建一个bool
查询,并将这两个查询作为must
子句。一元!
运算符通过将查询包装在bool
中并将查询放在must_not
子句中来对查询求反。查看更多信息https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/writing-queries.html
和
https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/bool-queries.html
关于elasticsearch - Elasticsearch percolate函数中的搜索选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45329990/