Создать лучший запрос для Lucene - PullRequest
0 голосов
/ 27 августа 2018

Эй, я пытаюсь создать несколько запросов, которые должны работать как "где ..... и .... и "в sql. я пробовал boolQuery для этой цели, например;

boolQueryBuilder.add(new BooleanClause(new FuzzyQuery(new Term(fieldCity, 
city), 0), Occur.FILTER)); 
boolQueryBuilder.add(new BooleanClause(new WildcardQuery(new Term(fieldText, 
str)), Occur.SHOULD)); 
boolQueryBuilder.add(new FuzzyQuery(new Term(fieldText, strTemp), fuzzy), 
Occur.SHOULD); 
boolQueryBuilder.add(new FuzzyQuery(new Term(fieldText, mergedKeyword), 
fuzzy), Occur.SHOULD); 

Это один из моих конструкторов генератора запросов. Но проблема в том, не работает как операция «И» «ФИЛЬТР» или «ДОЛЖЕН» вернуть все значения с данное поле, когда запросы "СЛЕДУЕТ" не совпадают ни с одним результатом.

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

Приятной работы.

1 Ответ

0 голосов
/ 29 августа 2018

Если я правильно понимаю, проблема в том, что вы возвращаете все результаты со совпадениями на fieldCity, независимо от того, есть ли у вас совпадение с fieldText или нет, и вы хотите, чтобы у всех результатов было хотя бы одно совпадение с fieldText.

То, что у вас сейчас есть, в основном: +city text1 text2 text3. Единственный термин, необходимый для соответствия - город. Остальная часть срока будет влиять на счет, но не будет ограничивать набор результатов. Если вы хотите убедиться, что вы получили хотя бы одно совпадение fieldText, вы можете изменить запрос так, чтобы он выглядел так: +city +(text1 text2 text3):

BooleanQuery fieldTextSubQuery = new BooleanQuery.Builder()
    .add(new WildcardQuery(new Term(fieldText, str), Occur.SHOULD)
    .add(new FuzzyQuery(new Term(fieldText, strTemp), fuzzy), Occur.SHOULD)
    .add(new FuzzyQuery(new Term(fieldText, mergedKeyword), fuzzy), Occur.SHOULD)
    .build();

BooleanQuery finalQuery = new BooleanQuery.Builder()
    .add(new FuzzyQuery(new Term(fieldCity, city), 0), Occur.FILTER)
    .add(textSubQuery, Occur.MUST)
    .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...