Как сделать запрос с постоянным счетом в Solr - PullRequest
2 голосов
/ 15 декабря 2010

Я использую SolrNet для доступа к индексу Solr, где у меня есть многозначное поле, называемое «тегами».Я хочу выполнить следующий запрос псевдокода:

(теги: стек) ^ 10 ИЛИ (теги: больше) ^ 5 ИЛИ (теги: поток) ^ 2

где термин "стек "увеличивается на 10," овер "увеличивается на 5, а" поток "увеличивается на 2. В результате я получаю то, что результаты со" стеком "будут выше, чем результаты с" потоком "и т. д..

Проблема, с которой я столкнулся, заключается в том, что «поток» появляется только в паре документов, но «стопка» появляется при загрузке, а затем из-за высокого значения idf документы с «потоком» появляются выше.те, у кого «стек».

Когда этот проект был реализован прямо в Lucene, я использовал ConstantScoreQuery, и это исключило, что idf основывал оценку исключительно на значении повышения.с Solr и SolrNet, где я просто передаю Solr строку запроса?Если нет, есть ли альтернативный способ решения этой проблемы?

Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 20 июня 2014

В Solr 5.1 и более поздних версиях это встроено в синтаксис синтаксического анализатора запросов с помощью оператора ^ =.

Так что просто возьмите ваш оригинальный запрос: (теги: стек) ^ 10 ИЛИ (теги: больше) ^ 5 ИЛИ (теги: поток) ^ 2

И замените ^ на ^ =, чтобы перейти от повышенного к постоянному: (теги: стек) ^ = 10 ИЛИ (теги: больше) ^ = 5 ИЛИ (теги: поток) ^ = 2

3 голосов
/ 15 декабря 2010

Я не думаю, что есть какой-либо способ напрямую выразить ConstantScoreQuery в Solr, но кажется, что запросы диапазона и префикса используют ConstantScoreQuery под капотом , поэтому вы можете попробовать подделать запрос диапазона, например tags:[flow TO flow]

Кроме того, вы можете реализовать свой собственный Solr QueryParser.

...