2017-01-05 4 views
0

У меня возникли проблемы с поиском способа, как иметь 2 по-разному структурированные поля в одном предлагаемом компоненте. (https://cwiki.apache.org/confluence/display/solr/Suggester)Solr - Предложить компонент с двумя различными типами полей

Цель состоит в том, чтобы иметь модуль автозаполнения с этими полями.

  • поля, в котором StandardTokenizer используется примера вывода: Это название
  • поля, в котором используется Пользовательский токенизатор (В основном регулярное выражение, чтобы получить базовый домен полного URL) примера вывод: thisisatitle .com

Поэтому RequestHandler, содержащий в suggestcomponent способен показывать обе строки в массиве результатов: thisisatitle.com и Это название

вещи ив пытавшаяся является:

  • Несколько suggestcomponents

Ive гугле и единственным решением, найденный ивом настоящего времени используют черепки, поскольку они позволяют для различных схем, которые будут объединены. На мой взгляд, это довольно неэффективно, поскольку запуск 2 серверов будет пустой тратой ресурсов, а также ремонтируемость будет страдать.

Любые предложения/обходные пути приветствуются.

+1

Любая причина, почему вы не можете запросить два поля, используя 'QF = field1 field2' или' д = field1: foo OR field2: foo'? – MatsLindh

+0

@MatsLindh Я вижу, где вы нацеливаетесь, но разве это не решит только вопрос, как запросить 2 поля? Проблема заключается не в том, как я могу запросить 2 поля, а в том, что эти два поля имеют разные типы полей. Помещение полей с разными типами полей в один обработчик запроса приводит к тому, что Solr создает ошибку в этой конечной точке. – Jointts

+0

Каждое поле запускает собственную цепочку анализа, прежде чем сравнивать полученные токены, поэтому наличие разных определений не должно быть проблемой. Что именно вы делаете и как вы это реализуете? Не нужно ли менять что-либо в обработчике запросов для его реализации? – MatsLindh

ответ

1

Чтобы использовать несколько словарей внушения (которые могут иметь различные анализаторы применяются), вы можете use the "multiple dictionaries" configuration as shown in the documentation:

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
    <str name="name">mySuggester</str> 
    <str name="lookupImpl">FuzzyLookupFactory</str>  
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>  
    <str name="field">cat</str> 
    <str name="weightField">price</str> 
    <str name="suggestAnalyzerFieldType">string</str> 
    </lst> 
    <lst name="suggester"> 
    <str name="name">altSuggester</str> 
    <str name="dictionaryImpl">DocumentExpressionDictionaryFactory</str> 
    <str name="lookupImpl">FuzzyLookupFactory</str> 
    <str name="field">product_name</str> 
    <str name="weightExpression">((price * 2) + ln(popularity))</str> 
    <str name="sortField">weight</str> 
    <str name="sortField">price</str> 
    <str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
    <str name="suggestAnalyzerFieldType">text_en</str> 
    </lst> 
</searchComponent> 
Смежные вопросы