Игнорирование специальных символов во время запроса в SOLR - PullRequest
0 голосов
/ 19 октября 2018

Я хочу игнорировать специальные символы во время запроса в SOLR.Например: Предположим, у нас есть документ в SOLR с содержанием : Меня зовут ABC .

содержимое: ABC ретрансрует документы, но содержимое: ABC не возвращает ни одного документа.

Мое требование заключается в следующем: ABC должен вернуть этот один документ.В общем, я хочу игнорировать это - во время запроса.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Чтобы соединить токены, когда между ними есть специальный символ (т. Е. A-B-C должен соответствовать ABC, а не просто A), вы можете использовать PatternReplaceCharFilter .Это позволит вам заменить все эти символы пустой строкой, фактически дав вместо этого ABC следующему этапу процесса анализа.

<analyzer>
  <charFilter class="solr.PatternReplaceCharFilterFactory"
             pattern="[^a-zA-Z0-9 ]" replacement=""/>
  <tokenizer ...>
  [...]
</analyzer>

Это сохранит все обычные буквы, цифры и пробелы ascii,при замене любого другого символа пустой строкой.Возможно, вам придется настроить эту группу символов так, чтобы она включала больше, но это будет зависеть от вашего необработанного контента и способа его обработки.

Это следует делать как при индексации, так и при запросах (если выхотите, чтобы пользователь также мог запрашивать A-B-C).Если вы хотите оценивать эти совпадения по-разному, используйте несколько полей с разными цепочками анализа - например, оставьте одно поле для токенизации только на пустое пространство, а затем увеличьте его выше (с qf=text_ws^5 other_field), если у вас есть совпадение на A-B-C.

Это не меняет того, какой контент на самом деле хранится для поля, поэтому возвращаемые данные останутся прежними - только то, как выполняется сопоставление.

0 голосов
/ 19 октября 2018

Здесь вы должны иметь тип поля для содержимого вашего поля.

Тип поля может иметь 2 отдельных анализатора.Один для индекса и один для запроса.

Здесь вы можете создать индексы контента "A-B-C", например ABC, A-B-C, используя "Word Delimiter Token Filter".

Использовать catenateWords.добавить как catenateWords = 1.Он будет работать следующим образом: «датчик горячей точки» → «датчик горячей точки».В вашем случае "Азбука".он будет генерировать "ABC"

Вот пример этого Фильтр разделителя слов

Использование:

<analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="true" catenateWords="1"/>
</analyzer>

<analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>

Это создаст несколько индексови вы сможете искать с ABC и A-B-C

...