私はSphinxを使用してWebサイトに検索を提供していますが、関連する結果を返すときに少し問題が発生しました。
質問を簡単にするために、@ titleと@bodyの2つのフィールドがあり、それぞれ100と15の重みが付けられていると仮定します。' in 'の単語のような小さな単語を検索するときは、その検索語の完全一致を上位にランク付けしてから、' in * | * in | * in * 'に一致するものをチェックし、それらをわずかに低くランク付けします。検索にこのタイプの特異性を持たせる方法はありますか?
' in 'の結果の例:
- インド料理
- 真ん中で
- ラテン語に関する文書
関連する設定は次のとおりです。
sphinx.conf内:
morphology = stem_en
charset_type = utf-8
min_word_len = 2
min_prefix_len = 0
min_infix_len = 2
enable_star = 1
search.phpで
$sp->SetMatchMode( SPH_MATCH_EXTENDED2 );
$sp->SetRankingMode( SPH_RANK_PROXIMITY_BM25 );
$sp->SetFieldWeights ( array('title' => 100, 'body' => 15) );
また、補足として、部分一致が検索結果に表示されない場合もあります。たとえば、Cowを検索しましたが、結果としてCowboyが表示されません。また、 CowbとCowboを検索しましたが、 Cowboyと入力して初めて、期待どおりの結果が得られました。何かご意見は?
この質問は、この前のSOの質問と同じ線に沿っていますが、私の問題と解決策を保証しようとしたことについて、もう少し詳しく説明したいと思います。