2013-12-22 2 views
0

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

Myname = ааа ГЭБ

Я хотел бы получить его для следующих строк поиска "AAA", "В", "ааа БББ", "Myname = ааа БББ", «Myname », но не для« aa »или« ame = a »или« a bb ». Другой пример:

<myName>aaa bbb</myName> 

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

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

[EDIT] текст может содержать любой символ. Перед поиском я хочу избежать строку поиска с помощью http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/util/ClientUtils.html

Thanks

ответ

0

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

<!-- 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

+0

thx. Но это найти aaa только в таких документах, как «name = aaa», но не в документах без пространства, таких как «name = aaa». Мне нужно найти aaa в обоих. – axelrod

+0

Отправьте полный запрос solr на пример, который, по вашему мнению, не работает. – Arun