Параметры поиска в функции Elasticsearch percolate
Мой вопрос заключается в том, как я могу использовать параметры поиска, такие как multimatch, slop и fuzziness, в перколятной функции с использованием 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))));
}
Ниже приведена функция percolate, которую я сейчас использую, но не знаю, как включить опции multimatch, slop и fuzziness. Я не мог найти подробности об этом в его документации.
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
Благодарю.
1 ответ
Во первых вы делаете 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