Чтобы соединить токены, когда между ними есть специальный символ (т. Е. 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
.
Это не меняет того, какой контент на самом деле хранится для поля, поэтому возвращаемые данные останутся прежними - только то, как выполняется сопоставление.