سؤال

وأود أن تنفيذ عملية بحث متقدمة لمشروعي. البحث يستخدم الآن كل السلاسل يدخل المستخدم ويجعل انفصال واحدة كبيرة مع API المعايير.

وهذا يعمل بشكل جيد، ولكن الآن أود أن تنفيذ المزيد من الميزات: AND، OR وبين قوسين ()

ولقد حصلت على صعوبة تحليل سلسلة - والمقاييس بناء من السلسلة. لقد وجدت هذا السؤال ستاكوفيرفلوو ، لكنها لم تساعد حقا (انه لم يصنع من الواضح ما يريد).

ولقد وجدت المقالة ، ولكن هذا يدعم أكثر من ذلك بكثير ويبصق البيانات SQL. شيء آخر لقد سمعت أذكر الكثير هو لوسين - ولكن لست متأكدا إذا كان هذا حقا من شأنها أن تساعد لي


ولقد تم البحث حول قليلا ولقد وجدت Lucene.Net WhitespaceAnalyzer وQueryParser.

ويتغير بحث A و B أو C إلى ما يشبه + A + B C، وهي خطوة جيدة في الاتجاه الصحيح (بالإضافة إلى أنه يعالج قوسين). ان الخطوة المقبلة ستكون للحصول على سلسلة المحولة إلى مجموعة من العطف والتباينات.

في جافا سبيل المثال وجدت تم باستخدام منشئ الاستعلام التي لم أجد في NHibernate.

وأي مزيد من الأفكار؟

هل كانت مفيدة؟

المحلول 2

ما أقوم به أساسا الحق الآن تحليل سلسلة الإدخال مع API Lucene.Net تحليل. هذا يعطيني جملة موحد ومبسط. (شبة الكود)

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