全文検索に sphinx を使用するのは初めてです。あまり正しくない洞察がたくさんあるかもしれません。異なるアイデアがある場合は、それを提案することができます。
現在のバージョンの sphinx が中国語をサポートしているかどうかはわかりません。グループの友達に聞いたところ、全員がサポートしていないとのことでした。そこで、次の方法を使用しました。
1. 記事の処理。
記事テーブルがarticle_mainの場合
id | title | summary | content | time |
1 | 测试的标题 | 测试的摘要 | 测试的内容 | 123123123 |
スフィンクスは中国語をサポートしていないため (本当ですか?ここで説明しましょう)
新しいテーブルarticle_unicodeを作成します
id | article_id | title | summary | content | time |
1 | 1 | 23243 23123 12213 | 12312 12312 12345 | 12312 12312 12345 | 123123123 |
この新しいテーブルの構造は、article_main の内容と同じですが、中国語の utf-8 Unicode コードが格納されています。
このように、記事を追加するときに、入力されたタイトル、要約、コンテンツを utf-8 unicode コードに処理して、article_unicode テーブルに保存します。
スフィンクスを構成する場合は、article_unicode テーブルをソースとして使用します (http://my.oschina.net/ptk/blog/495435 を参照)
2. 使用されるクラスutf-8 unicode を処理するメソッドは次のとおりです:
http://git.oschina.net/ctk/laravel5_backend/blob/master/app/Libraries/Spliter.php
呼び出しメソッドは次のとおりです:
$titleSplited = $spliterObject->utf8Split($data['title']);//文章标题$index['title'] = $titleSplited['words']; //这样得到的值就是文章标题的utf-8的unicode码了。
そしてテーブルに保存されます。
3. 検索するときは、まず検索語を Unicode コードに変換し、このコードを使用してスフィンクスを検索します。
$object = new \stdClass();$object->keyword = Request::input('keyword');$searchProcess = new Process();//这里其实就是把keyword转为unicode,我封装了一下。$keywordUnicode = $searchProcess->prepareKeyword($object->keyword);//然后通过sphinx搜索处理数据,最后拿到文章的id,即article_unicode表中的article_id$object->sphinxResult_ArticleIds = $searchProcess->sphinxSearch($keywordUnicode);//通过article_id再来做常规的查询。$articleList = (new SearchModel())->activeArticleInfoBySearch($object);
以上です。