SOLR — автоматическое предложение фраз

#solr #autosuggest

#solr #автоматическое предложение

Вопрос:

Я использую компонент SOLR suggester, но я не могу понять, как остановить его разделение на пробелы и возврат нескольких предложений для каждого слова.

Я хотел бы выполнить команду: http://localhost:8983/solr/suggest?q =«утечка памяти»

и заставьте его выполнить поиск в моем поле поиска (созданном с использованием KeywordTokenizerFactory, а не StandardTokenizerFactory) для всей фразы.

Я, конечно, просто туплю здесь?

Ответ №1:

Взгляните на эту тему: http://lucene.472066.n3.nabble.com/suggester-issues-td3262718.html

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

 import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Collections; 

import org.apache.lucene.analysis.Token; 
import org.apache.solr.spelling.QueryConverter; 

/**                                                                                                                                                                                                                                         
 * Converts the query string to a Collection of Lucene tokens.                                                                                                                                                                             
 **/ 
public class SpellingQueryConverter extends QueryConverter  { 

  /**                                                                                                                                                                                                                                       
   * Converts the original query string to a collection of Lucene Tokens.                                                                                                                                                                 
   * @param original the original query string                                                                                                                                                                                             
   * @return a Collection of Lucene Tokens                                                                                                                                                                                                 
   */ 
  @Override 
  public Collection<Token> convert(String original) { 
    if (original == null) {                                                                                                                                                             
      return Collections.emptyList(); 
    } 
    Collection<Token> result = new ArrayList<Token>(); 
    Token token = new Token(original, 0, original.length(), "word"); 
    result.add(token); 
    return resu< 
  } 

} 
  

Ответ №2:

В более поздних версиях solr (у нас есть 4.6.1) вам просто нужно добавить следующее в solrconfig.xml:

 <queryConverter name="queryConverter" class="org.apache.solr.spelling.SuggestQueryConverter"/>