0

「 Phrase Suggester 」を利用したいのですが。問題があります。「johni depp」と入力すると、次の順序でいくつかの結果が返されます。

  1. ジョン・デップ
  2. ジョニーデップ
  3. ジョアン・デップ
  4. ジョン・デップ

最初の結果が「ジョニー・デップ」になるように、jsonを使用して提案をソートするにはどうすればよいですか? phonetic indexerでこれを試してみましたが、成功しませんでした。

これは私の構成です:

クエリ:

{
  "query": {
    "multi_match": {
      "query": "johni depp",
      "fields": [
        "fullName.word"
      ],
      "operator": "and"
    }
  },
  "suggest": {
    "text": "johni depp",
    "film": {
      "phrase": {
        "analyzer": "whitespace-fullName",
        "field": "fullName.whitespace",
        "size": 5,
        "real_word_error_likelihood": 0.95,
        "max_errors": 0.5,
        "gram_size": 2
      }
    }
  },
  "from": 0,
  "size": 1,
  "sort": [],
  "facets": []
}

インデクサー (Elastica を使用していますが、同じことです):

$elasticaIndex->create(
              array(
                  'number_of_shards'   => 4,
                  'number_of_replicas' => 1,
                  'analysis'           => array(
                      'analyzer' => array(
                          'autocomplete-index-fullName'  => array(
                              'tokenizer' => 'standard',
                              'filter'    => 'asciifolding, lowercase, edgeNGram'
                          ),
                          'autocomplete-search-fullName' => array(
                              'tokenizer' => 'standard',
                              'filter'    => 'asciifolding, lowercase'
                          ),
                          'word-fullName'                => array(
                              'tokenizer' => 'keyword',
                              'filter'    => 'lowercase'
                          ),
                          'whitespace-fullName'          => array(
                              'tokenizer' => 'whitespace',
                              'filter'    => 'lowercase'
                          ),
                      ),
                      'filter'   => array(
                          'edgeNGram' => array(
                              'type'     => 'edgeNGram',
                              'min_gram' => 1,
                              'max_gram' => 15
                          )
                      )
                  )
              ),
              false
);

マッピング :

$mapping->setProperties(
        array(
            'fullName' => array('type'   => 'string',
                                'fields' => array(
                                    'autocomplete' => array(
                                        'type'            => 'string',
                                        'index_analyzer'  => 'autocomplete-index-fullName',
                                        'search_analyzer' => 'autocomplete-search-fullName'
                                    ),
                                    'word'         => array(
                                        'type'            => 'string',
                                        'analyzer'  => 'word-fullName'
                                    ),
                                    'whitespace'   => array(
                                        'type'            => 'string',
                                        'analyzer'  => 'whitespace-fullName'
                                    ),
                                )),
        )
);

参照値の例:

  • ジョン・クリーズ
  • ジョン・ゲンバーリング
  • ジョニー・ハリーデイ
  • ジョニーデップ
  • ジョアン・スファー
  • ジョアンナ・ライテル
  • サミュエル・ジョンソン
  • ジョンソン・トラオレ

前もって感謝します。

4

1 に答える 1

0

代わりに「完了提案」が必要なように見えますか?

私がお勧めできるのは、「両方」を使用することです。

  1. ファジーなしの基本的な補完サジェスターを使用した検索
  2. フレーズ サジェスターで検索
  3. fuzzy などで (1) にループします。
于 2014-08-21T08:26:38.163 に答える