Приоритизация результатов поиска в Solr, которые начинаются со строки поиска

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

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

q=(лорем*) или (лорем)

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

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


person Yirmiyahu Fischer    schedule 19.01.2020    source источник
comment
Итак, когда совпадает все слово, должно быть усиление, или слово должно быть вычленено, или это только первое слово?   -  person cheffe    schedule 12.02.2020
comment
Это для короткого поля. Повышение должно быть, когда поле начинается с этого значения. Например, при поиске ABC должны отображаться как 123ABC, так и ABC123, но ABC123 должен быть первым.   -  person Yirmiyahu Fischer    schedule 13.02.2020


Ответы (1)


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

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

Примечание:

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

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

  3. If you want to have mutitiple field in these two groups use {!max}, чтобы имитировать поведение мультиполя dismax.

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

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

person mkhludnev    schedule 09.02.2020