3

Solr を使用して、ユーザー検索でカテゴリの完全一致を見つけようとしています(e.g. "skinny jeans" in "blue skinny jeans")。次の型定義を使用しています。

<fieldType name="subphrase" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
  <analyzer type="index">
    <charFilter class="solr.PatternReplaceCharFilterFactory" 
                pattern="\ " 
                replacement="_"/>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.ShingleFilterFactory" 
            outputUnigrams="true"
            outputUnigramsIfNoShingles="true"
            tokenSeparator="_"
            minShingleSize="2"
            maxShingleSize="99"/>
  </analyzer>
</fieldType>

このタイプは、トークン化せずにカテゴリをインデックス化し、空白をアンダースコアに置き換えるだけです。ただし、クエリをトークン化し、それらをシングル化します (アンダースコアを使用)。

私がやろうとしているのは、クエリのシングルをインデックス付きのカテゴリと照合することです。Solr 分析ページでは、空白/アンダースコアの置換がインデックスとクエリの両方で機能し、クエリが正しくシングル化されていることがわかります (下のスクリーンショット)。

インデックスでの空白の変更と、クエリでのシングル生成の成功

私の問題は、Solr クエリ ページで帯状疱疹が生成されているのを確認できないことです。その結果、「スキニー ジーンズ」というカテゴリは一致せず、「ジーンズ」というカテゴリは一致していると推測されます :(

これはデバッグ出力です:

{
  "responseHeader": {
    "status": 0,
    "QTime": 1,
    "params": {
      "q": "name:(skinny jeans)",
      "indent": "true",
      "wt": "json",
      "debugQuery": "true",
      "_": "1464170217438"
    }
  },
  "response": {
    "numFound": 1,
    "start": 0,
    "docs": [
      {
        "id": 33,
        "name": "jeans",
      }
    ]
  },
  "debug": {
    "rawquerystring": "name:(skinny jeans)",
    "querystring": "name:(skinny jeans)",
    "parsedquery": "name:skinny name:jeans",
    "parsedquery_toString": "name:skinny name:jeans",
    "explain": {
      "33": "\n2.2143755 = product of:\n  4.428751 = sum of:\n    4.428751 = weight(name:jeans in 54) [DefaultSimilarity], result of:\n      4.428751 = score(doc=54,freq=1.0), product of:\n        0.6709952 = queryWeight, product of:\n          6.600272 = idf(docFreq=1, maxDocs=541)\n          0.10166174 = queryNorm\n        6.600272 = fieldWeight in 54, product of:\n          1.0 = tf(freq=1.0), with freq of:\n            1.0 = termFreq=1.0\n          6.600272 = idf(docFreq=1, maxDocs=541)\n          1.0 = fieldNorm(doc=54)\n  0.5 = coord(1/2)\n"
    },
    "QParser": "LuceneQParser"
  }
}

parsedquery パラメーターがシングル クエリを表示しないことは明らかです。インデックス付きの値に対してクエリ シングルを照合するプロセスを完了するには、何をする必要がありますか? この問題の解決に非常に近づいているように感じます。どんなアドバイスでも大歓迎です!

4

1 に答える 1