Я пытаюсь реализовать разумную функцию подсказки имени, используя серию фильтров. На данный момент у меня есть
<fieldType name="suggester" class="solr.TextField" positionIncrementGap="1" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigramsIfNoShingles="true" maxShingleSize="2"
outputUnigrams="true"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigramsIfNoShingles="true" maxShingleSize="2"
outputUnigrams="true"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
</analyzer>
</fieldType>
Который, безусловно, нуждается в дополнительной настройке, но я хотел бы остановиться на одном конкретном аспекте этого вопроса. Для входной строки mark daniel sievers
вышеупомянутое совпадет с запросом на mark
и sievers
, но я действительно хочу уменьшить детализацию EdgeNGramFilter
, потому что это вызывает несовпадение, и использовать фильтр / токенизатор, который может комбинировать слова в некотором настраиваемом порядке, например, для ввода mark daniel rex sievers
создать токены mark sievers
, mark daniel sievers
, mark rex sievers
и так далее. Я не применял какой-либо конкретный алгоритм для этого, но мне интересно, существует ли такой зверь (почти наверняка) или лучше написать свой собственный в качестве плагина фильтра?
Solr 3.3.0