1

部分文字列の Solr 検索の作成に問題があります。たとえば、ユーザーが「Alfa Romeo Land Car」を検索する場合、完全なブランド ( 「Land Rover」ではなく「Alfa Romeo」のみ) のみを一致させたいと考えています。これを行う方法は、クエリから帯状疱疹を作成し、「車のブランド」Solr コアと完全に一致させようとすることです。

したがって、ユーザーが「AB C」を検索した場合、帯状疱疹 [A、AB、ABC、B、BC、C] を取得したいと考えています。

しかし、以下の Solr 構成を使用すると、(EDisMax または標準クエリ パーサーを使用して)「AB C」を検索すると、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 管理 Web ページで、[Schema Browser] に移動し、問題のフィールドを選択して [Load Term Info] を押すと、次の索引付けされた用語が表示されます。

6
 /6 Top-Terms:  
1
ABC
ABCD
BC
BCD
CD
AB

「AB C」を検索すると、次の帯状疱疹 [ABC AB BC ABC] が必要ですが、デバッグ クエリからは次のようになります。

"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 はこれらの文字列を検索しないようです。私が欠けているものを誰か知っていますか?

事前にどうもありがとう

4

0 に答える 0