2014-02-09 4 views
0

У меня довольно большой индекс и довольно высокая частота запросов. Для уменьшения количества запросов к Solr я хочу увидеть, если два запроса являются одинаковыми или один подзапрос другого один без запуская ихПроверьте, совпадают ли два запроса

Например: Fun и пятницу == пятницу и Fun = Fun или пятницу

смешной является подзапрос Забавы *

и т.д. Любые идеи? mb с анализаторами или smth?

Приветствия

+0

Просто, чтобы прояснить это: вы уверены, что 'Fun and Friday' совпадает с' Friday and Fun'? Я спрашиваю в терминах «Релевантность». Обычно Solr рассматривает первое слово поиска как более важное, чем второе. Таким образом, первый поиск будет иметь верхние документы, более связанные с 'Fun', а другие больше относятся к' Friday' ... – cheffe

+0

Обычно ур прав, но в отрасли im, актуальность обычно игнорируется, это общий набор возвращаемых значений, Вопросы – Windys

ответ

0

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

Вот небольшой пример кода для сравнения запросов, когда порядок статей не важны:

public boolean areEqualsOrderNotImportant(Query q1, Query q2) { 
    if((q1 instanceof BooleanQuery) && (q2 instanceof BooleanQuery)) { 
     BooleanQuery bq1 = (BooleanQuery)q1; 
     BooleanQuery bq2 = (BooleanQuery)q2; 
     if(bq1.getClauses().length!=bq2.getClauses().length) { 
      return false; 
     } 
     for(BooleanClause clause: bq1.getClauses()) { //multiple occurence of same clause not handled 
      if(!contains(bq2.getClauses(), clause)){ 
       return false; 
      } 
     } 
     return true; 
    }else { 
     return q1.equals(q2); 
    } 
} 
+0

У вас есть пример кода для этого, PLS? – Windys

+0

Для чего именно? Код для всей функциональности был бы слишком большим. – fatih

+0

Для сравнения запросов? – Windys

0

Обычный способ справиться с этим, чтобы нормализовать эти два пункта (положить их в стандартный заказ) , затем выполните сравнение (например, сортировку 2 файлов, а затем сравнение отсортированных файлов, чтобы найти различия).

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

Смежные вопросы