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 не ищет с этой строкой. Кто-нибудь знает, что мне не хватает?

Заранее большое спасибо

0 ответов

Другие вопросы по тегам