Приоритизация результатов поиска в Solr, которые начинаются со строки поиска - PullRequest
2 голосов
/ 19 января 2020

Я использую Solr 5.2 с возможным обновлением до 8.2, а также edismax для поиска строки среди выбранных полей. В некоторых полях запроса используется ngram, поэтому результаты, содержащие строку поиска, будут отображаться в поиске. Я хочу иметь документы, в которых есть совпадение, начинающееся со слова поиска, которое будет отображаться в начале результатов поиска.

Моя первая попытка состояла в том, чтобы поместить как строковое поле, так и текстовое поле ngram в qf и поиск строки и начинается с повышения. Например, если строка поиска "lorem", я бы использовал:

q = (lorem *) или (lorem)

Я бы также использовал бустеры для строковых полей. Однако совпадения ngram, кажется, набирают больше очков, поэтому совпадения, начинающиеся с поисковых слов, не всегда отображаются первыми.

Как мне найти совпадения, в которых отображаются искомые слова в начале строки поиска первый

1 Ответ

0 голосов
/ 09 февраля 2020

К сожалению, синтаксис неудобен и не очень предсказуем. Буквально, что вам нужно, это

q=({!prefix f=string_fied}lorem)^100 {!field f=ngram_field}electric&defType=lucene

Примечание:

  1. dismax (что вы подразумеваете под ссылкой qf) не поддерживает wildcard, есть примечание в refguide.

  2. не запускайте сложный запрос с { здесь есть один сюрприз. Вы можете даже использовать пробел , чтобы запустить его.

  3. Если вы хотите иметь поле разнесения в этих двух группах , используйте {!max}, чтобы имитировать c dismax mutifield поведение.

Удачи. Тебе это действительно нужно.

PS. Кстати, посмотрите на JSON Query DSL, он может избежать такой синтаксической бомбы и немного чище.

...