Solr MultiPhraseQuery не возвращает правильные результаты
У меня проблемы с созданием Solr поиска подстрок. Например, когда пользователь ищет "Alfa Romeo Land Car", я хочу сопоставлять только полные бренды (только "Alfa Romeo", а не "Land Rover"). Способ, которым я пытаюсь это сделать, заключается в том, что я создаю опоясывающий лишай из моего запроса, а затем пытаюсь найти точное совпадение с ядром Solr моих "автомобильных марок".
Поэтому, если пользователь ищет "ABC", я хотел бы получить черепицу [A, AB, ABC, B, BC, C].
Но когда я использую конфигурацию Solr ниже, когда я ищу "A B C" (используя EDisMax или стандартный анализатор запросов), Solr ничего не возвращает, но если поиск "ABC", я получаю соответствующий результат "ABC".
Вот мой файл schema.xml:
<field name="id" type="tint" indexed="true" stored="true" required="true"/>
<field name="name" type="text_exact" indexed="true" stored="true" required="true"/>
<field name="seoAlias" type="string" indexed="true" stored="true" required="true"/>
<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="0" generateWordParts="0" catenateAll="1" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="0" generateWordParts="1" catenateAll="0" />
<filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramsIfNoShingles="true" tokenSeparator="" maxShingleSize="5"/>
</analyzer>
</fieldType>
Вот документы в моем ядре Solr:
"response": {
"numFound": 7,
"start": 0,
"docs": [
{
"id": 1,
"name": "A B C D",
"seoAlias": "abce",
"_version_": 1524585748644233200
},
{
"id": 2,
"name": "A B C",
"seoAlias": "abce",
"_version_": 1524586301229105200
},
{
"id": 3,
"name": "B C D",
"seoAlias": "abce",
"_version_": 1524586311147585500
},
{
"id": 4,
"name": "A B",
"seoAlias": "abce",
"_version_": 1524586322261442600
},
{
"id": 5,
"name": "B C",
"seoAlias": "abce",
"_version_": 1524586329997836300
},
{
"id": 6,
"name": "C D",
"seoAlias": "abce",
"_version_": 1524586338173583400
},
{
"id": 7,
"name": "B",
"seoAlias": "abce",
"_version_": 1524652609127841800
}
]
},
На веб-странице администратора Solr, если я перехожу к "Обозревателю схемы", затем выбираю соответствующее поле и нажимаю "Загрузить информацию о термине", я вижу следующие проиндексированные термины:
6
/6 Top-Terms:
1
ABC
ABCD
BC
BCD
CD
AB
Когда я ищу "ABC", мне нужны следующие листы [ABC AB BC A B C], но из отладочного запроса я получаю:
"response": {
"numFound": 0,
"start": 0,
"docs": []
},
"debug": {
"rawquerystring": "*:*",
"querystring": "*:*",
"parsedquery": "MatchAllDocsQuery(*:*)",
"parsedquery_toString": "*:*",
"explain": {},
"QParser": "LuceneQParser",
"filter_queries": [
"name:\"A B C\""
],
"parsed_filter_queries": [
"**MultiPhraseQuery**(name:\"(A AB ABC) (B BC) C\")"
],
Я думаю, что проблема может быть связана с MultiPhraseQuery. Это создает то, что кажется правильным черепицей, но кажется, что Solr не ищет с этой строкой. Кто-нибудь знает, что мне не хватает?
Заранее большое спасибо