Вы можете сравнить анализируемый объект запроса на равенство. Чтобы игнорировать порядок логических предложений, для этого вам нужно указать свой собственный компаратор. Точно так же вы должны проверить, является ли запрос подзапросом другого. Я сделал это некоторое время назад по той же причине, что и у вас, и это сработало достаточно хорошо.
Вот небольшой пример кода для сравнения запросов, когда порядок статей не важны:
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);
}
}
Просто, чтобы прояснить это: вы уверены, что 'Fun and Friday' совпадает с' Friday and Fun'? Я спрашиваю в терминах «Релевантность». Обычно Solr рассматривает первое слово поиска как более важное, чем второе. Таким образом, первый поиск будет иметь верхние документы, более связанные с 'Fun', а другие больше относятся к' Friday' ... – cheffe
Обычно ур прав, но в отрасли im, актуальность обычно игнорируется, это общий набор возвращаемых значений, Вопросы – Windys