Solr searchField схема для одного совпадения
Я хотел бы написать конкретный fieldType, который будет работать, как показано в примере ниже:
Скажем, у нас есть имя: foo MooBar (f00B2r)
;
- "f" =>
foo MooBar (f00B2r)
(и другие с "F") - "foo moob" =>
foo MooBar (f00B2r)
(и другие с "foo moob" и т. д.) - "foo (f0" =>
foo MooBar (f00B2r)
- "moobar f" =>
foo MooBar (f00B2r)
- "(f00b2r)" =>
foo MooBar (f00B2r)
- "бар" => нет
- "moobar o" => нет
- "moob foo" => нет
Мои проблемы:
- Если я буду искать "moobar f", я не получу ничего;
- Если я буду искать "(f00b2r)", я ничего не получу;
мой fieldType в solr / conf / schema.xml:
<fieldType name="frontMatch" class="solr.TextField" positionIncrementGap="255">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
</analyzer>
</fieldType>
PS
Извините за мой английский и спасибо;
1 ответ
Решение
Решение для меня:
Часть scheme.xml
<fieldType name="frontMatch" class="solr.TextField" positionIncrementGap="0" >
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="255" side="front" />
</analyzer>
</fieldType>
Это решает вторую проблему.
Чтобы решить первый:
Каждый запрос должен выполняться с Proximity;
Число 1000000 равно оператору "И" при поиске.
Итак, поисковый запрос выглядит так: name:"moobar f"~1000000
;
где name
это поле, в котором мы ищем;