تحليل سلسلة بحث (في NHibernate المقاييس)
-
05-07-2019 - |
سؤال
وأود أن تنفيذ عملية بحث متقدمة لمشروعي. البحث يستخدم الآن كل السلاسل يدخل المستخدم ويجعل انفصال واحدة كبيرة مع 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
}
}
وبعد ذلك أنا تحليل هذه السلسلة يدويا، وخلق التباينات والعطف.
نصائح أخرى
واعتقد انك لم نسمع عن Nhibernate البحث أ > حتى الآن
وNhibernate البحث يستخدم لوسين تحت ويعطي يو جميع الخيارات استخدام AND، OR، النحوي.
كل ما عليك القيام به هو السمة الكيانات للحصول على فهرسة وNhibernate سوف مؤشر عليه في مكان محدد مسبقا.
في المرة القادمة يمكنك البحث هذا المؤشر مع القوة التي لوسين يفضح ومن ثم الحصول على الأشياء كيان مستوى نطاقك في المقابل.
using (IFullTextSession s = Search.CreateFullTextSession(sf.OpenSession(new SearchInterceptor()))) {
QueryParser qp = new QueryParser("id", new StopAnalyzer());
IQuery NHQuery = s.CreateFullTextQuery(qp.Parse("Summary:series"), typeof(Book));
IList result = NHQuery.List();
وقوية، أليس كذلك؟