Sitecore 7.2 - Solr 4 фасетный поиск подсказок - нет результатов с дефисами в поисковом слове - PullRequest
0 голосов
/ 27 июня 2019

Я отправляю запрос в Solr, чтобы получить предложения для слова, которое выглядит так:

http://localhost:8983/solr/mysearchindex/select?q=_templatename:Page&facet.field=pagecontent_t&facet.prefix=book&rows=0&facet=true&version=2.2&facet.sort=true

pagecontent_t - это вычисляемое поле типа text, заполненное содержимым элементов Sitecore. Его конфигурация:

<field fieldName="PageContent" returnType="text">Feature.Search.ComputedFields.PageContentField, Feature.Search</field>

Конфигурация * _t полей в schema.xml:

<dynamicField name="*_t" type="text_general" indexed="true" stored="true" />

<fieldType name="string" class="solr.TextField" sortMissingLast="true">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>

Это работает для слов без дефисов, но я ничего не получаю для слов, включая дефис.

Я попытался использовать скопированное поле "pagecontent_s" типа string. Используя это, я получаю результаты с дефисами, но весь контент страницы перезапускается вместо того, чтобы просто соответствовать словам для подсказок.

Чего мне не хватает? Какой лучший способ получить предлагает работать с дефисами в поисковом слове?

1 Ответ

1 голос
/ 27 июня 2019

Если вы хотите разделить слова только на пробел, разделяя их, исключая другие формы пунктуации, используйте WhitespaceTokenizer для своего поля вместо StandardTokenizer (или WordDelimiterFilter где-нибудь в вашей цепочке).

Фасеты генерируются поверх индексированных токенов, и если ваши токены разбиты на более мелкие части, чем вы хотите, то это то, что используется для вычисления значений фасетов. Исправьте обработку, чтобы получить желаемый результат (который, по-видимому, состоит в том, что только пробел должен разделять токены).

...