このレポを構築する私の意図は、このテーマに関する私の簡単な知識、つまりフルテキスト検索、またはFTSだけを共有することでした。ご覧のとおり、その結論に到達するためにいくつかのテストと調査を行いましたが、最後のセクションのリンクは、私が読んだことを理解したい人なら誰でも助けて(なぜそうではないのか)、この非常にリポジトリ(PRは感謝されています)に貢献するのに役立ちます。
このリポジトリには、SearchKick GEMを使用してユーザーの入力に基づいて優れた推奨事項(FTS)を作成するRails 6.x APIが含まれています。これは、タイトルとボディフィールドを備えた投稿を作成し(後で表示されるように)シンプルな小さなHTTP APIであり、文字列の比較を簡単にするだけでなく、実際の良い推奨事項にアプローチする検索を行うことができます。その目的のために、ElasticSearch以外にFTSアプローチの他のソリューションがあるかどうかの調査を開始します。
単純な「グーグル」は、MySQLやPostgreSQLなどのより一般的なDBMでFTSを実行するための多くの方法をもたらすことができます。ほとんどの場合、よりテスト済みの選択を選択し、「新しい」に対して代替品を広める方が良いです -エラスティクスサーチでさえ、コミュニティとソフトウェアの信頼性に関するテクノロジーではありません。それでは、PostgreSQLとMySQLの間に古いシルバーブレットを選択してみませんか?
MySQLにFTSを使用する方法はいくつかあります:自然言語検索とブール検索。言語検索は、指定したフィールドとクエリを単語ごとに比較する単語を検索しているため、理解が明確になります。クエリ文字列にもっと対応する行は、より多くのスコアを獲得し、このまさにスコアによってランク付けされます。ゼロスコアは、通信がないことを意味し、その行はMySQL FTSで返されません。この例を確認します(敏感な可能性のある難解な部分):
SELECT CASE WHEN LENGTH(content) > 140
THEN CONCAT( SUBSTRING (content, 1 , 140 ), ' ... ' )
ELSE content
END AS adapted_content,
MATCH(content) AGAINST ( ' lei ' IN NATURAL LANGUAGE MODE) AS score
FROM posts;ブールアプローチでは、各単語の「スコア」を個別に変更できる他のツールを使用できます。自然言語モードを使用すると、いくつかの良い一致が見つかり、主にブールモードと比較すると簡単に実装できます。ただし、これはユーザーが入力を誤って入力した場合のユースケースをカバーしません。そのため、ユーザーには非常に正確な執筆方法を期待しています。これは決して真実ではありません。 PostgreSQLの場合と同じケース:FTSを実行する方法はいくつかありますが。ここでは、文字列をより深く分析することによってのみ解決できる問題があります。 「Lei」を「Le」に変更するだけで(「I」」(「I」を削除します)、それは私たちのスコアに起こります。
この問題を解決するために、ElasticsearchesはJava Lucene Engineを使用してFTSを実装しました。それは私たちに、間違いの解釈、ステミング、特別なキャラクターなどの多くのツールをもたらします-Como Acentos NaMinhaLínguaPátria! - そしてその他。これらすべてのものは、私たち自身で開発するのに非常に複雑になる可能性があるため、これらのツールを求める場合、非常に正当化できます。
$ gem install bundler
$ git clone [email protected]:abmBispo/rails-autocomplete.git
$ cd rails-autocomplete
$ bundle installこのRailsサービスの依存関係(PostgreSQLとElasticSearch)のコンテナをマシンに取り付ける代わりに実行するのは非常に簡単です。プロセスとメモリとストレージの管理をよりよく処理するのに役立ちます。それで、ここであなたはまさにそれをするためのスニペットを手に入れました:
$ docker run --name postgres-database -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 -v $HOME /docker/volumes/postgres:/var/lib/postgresql/data postgres
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -d -e " discovery.type=single-node " docker.elastic.co/elasticsearch/elasticsearch:7.6.2Dockerを初めて使用していて、これだけが画像を実行している場合は、実行するだけでオフにすることができます。
$ sudo docker stop $( sudo docker ps -a -q )そして、再びオンにします:
$ sudo docker start $( sudo docker ps -a -q -f " status=exited " ) $ bin/rails db:create db:migrate db:seed $ bin/rails sここでは、APIの検索と作成に関するPostmanに関する簡単なドキュメントを入手できます。