2015-08-27 3 views
1

Я новичок в Solr я документ индексируется в Solr, напримерУдалить пунктуацию в поисках SOLR

{ 
    "foodType": "basicFood", 
    "fulltext": [ 
     "basicFood", 
     "3.718625", 
     "1 tbsp", 
     "Butter, salted" 
    ], 
    "slims": "3.718625", 
    "displayText": "1 tbsp", 
    "displayName": "Butter, salted" 
    }, 

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

+0

вы можете указать запрос? Какие два вопроса используются, не ясны из вопроса? – YoungHobbit

+0

http: // localhost: 8983/solr/food/select? Q = butter & wt = json & indent = true Это не работает –

+0

Вы также можете предоставить то, что работает? – YoungHobbit

ответ

1

Добавьте в свой анализатор фильтр для фазы индекса и запроса.

<filter class="solr.PatternReplaceFilterFactory" pattern="([^A-Za-z0-9])" replacement="" replace="all"/> 

Это заменит все буквы из маркеров, кроме a-z, A-Z и 0-9. Чтобы протестировать это, вам может потребоваться повторная индексация ваших данных, потому что ваши индексированные данные будут иметь пунктуации. или вы можете попробовать в пользовательском интерфейсе solr admin, разделе анализа.

Другой подход, используя другой токенизатор вместо StandardTokenizerFactory в фазе анализатора. Вы можете использовать LetterTokenizerFactory, который создает маркеры, состоящие из строк смежных букв. Любые небуквенные символы будут отброшены. Но это может создать много дополнительного токена, которого вы, возможно, не захотите. Пожалуйста, проверьте, прежде чем делать.

Example: "I can't" ==> "I", "can", "t" 

Update

Если вам нужно использовать WordDelimiterFilter фильтр. Попробуйте ниже конфигурацию:

<filter class="solr.WordDelimiterFilter" generateWordParts="1" catenateWords="1" splitOnCaseChange="0" generateNumberParts="0" splitOnCaseChange="0"/> 

Это будет расщепляет слов на разделителей и сцепить их снова. Все остальные расколы turned off, как numeric strings, camel-case change и transitions from alpha to numeric. При необходимости вы можете указать turn on, указав non-zero.

+0

Большое вам спасибо работал просто отлично. –

+1

На самом деле правильным фильтром для этого случая является WordDelimiterFilter, который предоставляет намного больше опций и специально предназначен для обработки знаков препинания и других разделителей. Более подробную информацию см. Здесь: https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-WordDelimiterFilter – spyk

+0

Да. Вы можете использовать 'WordDelimiterFilter' для удаления пунктуации. Но он разделит токен на несколько токенов и предоставит возможность для их присоединения. Это достигается, главным образом, заменой всех не буквенно-цифровых символов. Я бы предложил, проверить ваш набор данных и использовать соответственно. Специально для угловых шкафов. – YoungHobbit