Повышение поисковой релевантности Solr

Я использую Solr 5.0.0, у меня есть один вопрос по повышению актуальности:

Если я ищу laptop table подобные слова, есть ли способ повысить результат поиска по слову перед такими словами, как with или without и т. Д.

Я использовал этот запрос:

? defType = dismax 
    & q = foo bar 
    & bq = (*:* -by)^999  

Но это отрицательно скажется на тех документах, в которых есть слово by или with и т. Д. Как я могу избежать этой проблемы?

Например, если я ищу laptop table, то по вышеуказанному запросу результат DGB Cooling Laptop Table by GDB не будет увеличиваться.

Мне просто нужно усилить поисковые слова перед определенными словами, такими как by, with и т. Д. Возможно ли это?


person Juhan    schedule 03.07.2015    source источник
comment
Я не понимаю, что вам нужно? Разве это не то, что вы хотите в своем последнем вопросе: stackoverflow.com/questions / 30621679 / solr-rule-based-boost?   -  person alexf    schedule 03.07.2015
comment
@alexf нет. Здесь слово для поиска перед некоторыми словами, такими как with или by и т. Д., Должно быть увеличено, поисковое слово после слов, таких как by, не нужно учитывать.   -  person Juhan    schedule 03.07.2015


Ответы (1)


В вашем примере вы хотите, чтобы ...laptop table by... результаты были выше, чем laptop table результаты без by. И вы хотите, чтобы ...by laptop table... был полностью опущен.

Назовем их:

  • Q1: ...laptop table by... (давайте увеличим на 2 для упражнения)
  • Q2: ...laptop table... (давайте вообще не форсировать)
  • Q3: ...by laptop table... (мы хотим опустить это)

Итак, ваш запрос в аннотации: (Q1^2 OR Q2) NOT Q3

Анализатор разоблачения может заслонять ваши цели, делая слишком много от вашего имени. По крайней мере, для этой части вам следует рассмотреть возможность использования стандартного (Lucene) Query Parser:

`q=("laptop table by"^2 OR "laptop table") NOT "by laptop table"`

Если вы хотите разрешить неаккуратные (т.е. лишние слова между запросом и 'by' или 'with') и сохранить порядок терминов, как указано выше, вам следует изучить ComplexPhraseQueryParser (Solr 4.8+) У Йоника Сили есть хорошая статья об этом.

Тогда вы могли бы сделать что-то вроде этого:

`q=({!complexphrase inOrder=true}"laptop table by"~2^2 OR "laptop table") NOT {!complexphrase inOrder=true}"by laptop table"~2`
person Peter Dixon-Moses    schedule 03.08.2015