質問

プロジェクトに高度な検索を実装したいと思います。 検索権限は、ユーザーが入力したすべての文字列を使用し、クライテリアAPIと1つの大きな分離を行います。

これは正常に機能しますが、ここでさらに機能を実装したいと思います:AND、OR、および角括弧()

文字列を解析し、文字列から条件を作成するのに苦労しています。 このStackoverflowの質問を見つけましたが、本当に助けにはなりませんでした(彼はしませんでした)彼が望んでいたことは明らかです。)

別の記事を見つけましたが、これはさらに多くをサポートし、SQLステートメントを吐き出します。 私が聞いたことのある別のことはLuceneですが、これが本当に役立つかどうかはわかりません。


少し検索してみたところ、Lucene.Net WhitespaceAnalyzerとQueryParserが見つかりました。

検索A AND B OR Cを+ A + B Cのようなものに変更します。これは正しい方向への適切なステップです(さらに括弧を処理します)。 次のステップは、変換された文字列を接続詞と選言のセットに取得することです。

私が見つけたJavaの例は、NHibernateで見つけることができなかったクエリビルダーを使用していました。

その他のアイデア?

役に立ちましたか?

解決 2

基本的に私が今していることは、Lucene.Net解析APIを使用して入力文字列を解析することです。 これにより、統一された簡素化された構文が得られます。 (擬似コード)

using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;

void Function Search (string queryString)
{
    Analyzer analyzer = new WhitespaceAnalyzer();
    QueryParser luceneParser = new QueryParser("name", analyzer);
    Query luceneQuery = luceneParser.Parse(queryString);
    string[] words = luceneQuery.ToString().Split(' ');

    foreach (string word in words)
    {
        //Parsing the lucene.net string
    }
}

その後、この文字列を手動で解析し、選言と接続詞を作成しています。

scroll top