「 Phrase Suggester 」を利用したいのですが。問題があります。「johni depp」と入力すると、次の順序でいくつかの結果が返されます。
- ジョン・デップ
- ジョニーデップ
- ジョアン・デップ
- ジョン・デップ
最初の結果が「ジョニー・デップ」になるように、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'
),
)),
)
);
参照値の例:
- ジョン・クリーズ
- ジョン・ゲンバーリング
- ジョニー・ハリーデイ
- ジョニーデップ
- ジョアン・スファー
- ジョアンナ・ライテル
- サミュエル・ジョンソン
- ジョンソン・トラオレ
前もって感謝します。