NoSQL DBに格納されている文字列のリストが非常に大きいです。入力クエリは文字列であり、この文字列がリストにあるかどうかをチェックしたいと思います。完全一致の場合、これは非常に簡単です。 NoSQL DBがStringを主キーとして持つことがあり、その文字列を主キーとするレコードがあるかどうかをチェックします。しかし、私はファジーマッチもチェックする必要があります。Javaでの文字列のファジー文字列一致
リスト内のすべての文字列をトラバースし、入力文字列とリスト内の文字列との距離を調べる方法がありますが、この方法はO(n)の複雑さをもたらし、リストのサイズは非常に大きくなります)さらに増加する可能性があります。このアプローチにより、私のソリューションの待ち時間が長くなります。
この問題を解決するには、より良い方法がありますか?
ファジーストリングを検索することは、常に複雑です。それは非常に複雑になり、私はそれを避けるための本当の良い解決策はないと思います。ファジーストリングを検索することは可能ですか? しかし、どのnonsqlデータベースを使用していますか。それらの一部は、ファジー文字列の検索機能を提供します。または、[ElasticSearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html)のようなSearchEngineを使用するようにしてください。 – GAlexMES
なぜあなたは使用しないでくださいSoundexやMetaphoneのような発音アルゴリズムがあります。試してみてください。 –
Apacheコモンズ・テキスト・ライブラリーには、余弦距離などのルーチンがありますが、少なくとも組み込みのLuceneを使用したいと思うように聞こえます。たとえLucene Levenshteinであっても、Luceneはこれを改善しましたが、距離の検索にはコストがかかります。 –