2016-06-23 23 views
0

Warum gibt dies 0 zurück, ein Dokument existiert mit TopTabId = 1027 und ContentPlainRemaded = Word?LUCENE.NET sucht nicht mit zwei AND

{+TopTabId:1027 +ContentPlainRemaded:Word*} 

Diese Abfrage funktioniert, aber mehr Datensätze zurückgibt dann benötigt:

{TopTabId:1027 +ContentPlainRemaded:Word*} 

Problem Code lautet:

Query query1; 
BooleanQuery querySearch = new BooleanQuery() 
query1 = ((new QueryParser(VersionsToUse, "TopTabId",  Analyzer)).Parse("1027")); 
querySearch.Add(new BooleanClause(query1, Occur.MUST)); 
query1 = ((new QueryParser(VersionsToUse, "ContentPlainRemaded", Analyzer)).Parse("WORD")); 
querySearch.Add(query1, Occur.MUST); 

using (IndexSearcher searcher = new IndexSearcher(SearchIndexDirectory, true)) 
{ 
    var docs = searcher.Search(querySearch, 100); 
    ................................. 
} 

LUCENE.NET 3.0.3

TopTabID ist Zeichenkettentyp: ldoc.Add(new Field("TopTabId", doc.TopTabId.ToString(), Field.Store.YES, Field.Index.ANALYZED));

Ich versuchte NumericRangeQuery, aber immer noch 0 Ergebnisse.

Ich denke Problem nicht mit TopTabId ist, weil und dies nicht funktioniert (return 0 Ergebnis): {+ContentPlainRemaded:Word* +ContentPlainRemaded:Word*}

+0

Können Sie Ihre Ergebnisse überprüfen? 'TopTabId: 1027 + ContentPlainRemaded: Word *' einige Ergebnisse erhalten, aber '+ ContentPlainRemaded: Word * + ContentPlainRemaded: Word *' (oder das im Wesentlichen äquivalente '+ ContentPlainRemaded: Word *') bringt keine Ergebnisse nicht wirklich summiert. Versuchen Sie, Ihre Abfrage vor dem Ausführen zu drucken, um sicherzustellen, dass es wie erwartet aussieht. – femtoRgon

+0

Nicht funktioniert, wenn ich zwei UND (+) Element hinzugefügt. Sie arbeiten: '+ ContentPlainRemaded: Word *', '+ TopTabId: 1027' Sie arbeiten nicht:' + ContentPlainRemaded: Word * + ContentPlainRemaded: Word * '' + TopTabId: 1027 + ContentPlainRemaded: Word * ' – user3093010

+0

Es scheint, als ob Sie aren Erklären Sie nicht genau, was funktioniert und was nicht. Sagen Sie tatsächlich, dass '+ TopTabId: 1027 + ContentPlainRemaded: Word *' andere Ergebnisse als '+ ContentPlainRemaded: Word *, + TopTabId: 1027' erhält? Das sind * identische * Ausdrücke in der Lucene-Abfragesyntax, daher ist es schwer herauszufinden, was Sie meinen. Haben Sie versucht, jede Abfrage einzeln auszuführen (dh die boolesche Abfrage vollständig zu löschen)? – femtoRgon

Antwort

1

Ich vermute, dass „TopTabId“ als numerisches Feld indiziert ist. Der QueryParse verarbeitet im Allgemeinen keine numerischen Felder. Sie haben zwei Optionen:

  • Ändern Sie TopTabId in ein nicht numerisches Feld. Dies ist oft die beste Wahl, wenn Ihr Feld eine ID-Nummer oder etwas ähnliches ist. Etwas, das mehr eine Ziffernfolge als eine reelle Zahl ist. Wenn Sie nicht danach sortieren oder Bereichsabfragen ausführen, muss es wahrscheinlich kein numerisches Feld sein.

  • Verwenden Sie ein NumericRangeQuery auf diesem Gebiet zur Abfrage:

BooleanQuery querySearch = new BooleanQuery() 
    Query query1 = NumericRangeQuery.newIntRange("TopTabId", 1027, 1027, true, true); 
    querySearch.Add(new BooleanClause(query1, Occur.MUST)); 
    Query query2 = new QueryParser(VersionsToUse, "ContentPlainRemaded", Analyzer).Parse("WORD"); 
    querySearch.Add(new BooleanClause(query2, Occur.MUST)); 
+0

Ich überprüfe das morgen. Heute kann ich nicht :( – user3093010

+0

Sorry für die späte Antwort. Ich habe die Frage bearbeitet – user3093010