Ich habe meinen kleinen QueryParser auf dem Weg zur Volltextsuche ohne Volltextkatalog ein wenig erweitert. So "kann" er jetzt auch entsprechende Where-Klauseln bereitstellen, die mit DIFFERENCE() arbeiten. Die Funktion steht netterweise auch im SQL Server Express zur Verfügung, und erleichtert einem da das Leben natürlich schonmal gehörig. Beispiel:
Code:
protected void Button1_Click(object sender, EventArgs e)
{
QueryParser qp = new QueryParser();
qp.DefaultOperator = QueryOperator.AND;
qp.QueryType = QueryType.Difference;
qp.MinDifference = 2;
Label1.Text = "SELECT * FROM table WHERE " + qp.Parse(TextBox1.Text, new string[] { "firstname", "lastname" });
qp = new QueryParser();
qp.DefaultOperator = QueryOperator.AND;
qp.QueryType = QueryType.Like;
Label2.Text = "SELECT * FROM table WHERE " + qp.Parse(TextBox1.Text, new string[] { "firstname", "lastname" });
}
Ergebnis von "edmund AND stottern OR "Stotter Ede":
SELECT * FROM table WHERE (DIFFERENCE(firstname,'edmund') >= 2 OR DIFFERENCE(lastname,'edmund') >= 2) AND (DIFFERENCE(firstname,'stottern') >= 2 OR DIFFERENCE(lastname,'stottern') >= 2) OR (DIFFERENCE(firstname,'Stotter Ede') >= 2 OR DIFFERENCE (lastname,'Stotter Ede') >= 2)
SELECT * FROM table WHERE (firstname LIKE '%edmund%' OR lastname LIKE '%edmund%') AND (firstname LIKE '%stottern%' OR lastname LIKE '%stottern%') OR (firstname LIKE '%Stotter Ede%' OR lastname LIKE '%Stotter Ede%')
Download:
QueryParser1_1.zip (2,74 KB)