Solr - Совпадение всего слова только в текстовых полях

У меня есть текстовое поле, которое может содержать очень длинные значения (например, текстовые файлы). Я хочу создать для него тип поля (текст, а не строка), чтобы в notepad++ было что-то вроде "Совпадение всего слова", но разделитель не должен быть только пробелами. Если у меня есть:

myName = AAA BBB

Я хотел бы получить его для следующих строк поиска "aaa", "bbb", "aaa bbb", "myName = aaa bbb", "myName", но не для "aa", "ame = a" или "a бб". Другой пример:

<myName>aaa bbb</myName> 

Могу ли я сделать это как-нибудь?

Каким должно быть мое определение типа поля?

[РЕДАКТИРОВАТЬ] текст может содержать любой символ. Перед поиском я экранирую строку поиска, используя http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/util/ClientUtils.html

Спасибо

1 ответ

Начнем с того, (зачем вам экранировать специальные символы? Вам нужно, чтобы они токенизировались на них как во время индекса, так и во время запроса):

<!-- A general text field that has reasonable, generic
         cross-language defaults: it tokenizes with StandardTokenizer,
     removes stop words from case-insensitive "stopwords.txt"
     (empty by default), and down cases.  At query time only, it
     also applies synonyms. -->
    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

Это хорошее место, чтобы узнать, как обрабатывается ваш текст как во время индекса, так и во время запроса. Очень полезный инструмент администратора: http://localhost:8983/solr/#/collection1/analysis

Другие вопросы по тегам