2016-04-29 14 views
0

Iam versucht, eine 2-stufige Suche zu implementieren, die zuerst nach einem Dokument Titel sucht (gespeichert als StringField) und nachdem ich die docId des übereinstimmenden Dokuments Ich suche nach einer Zeichenfolge innerhalb dass Inhalt des Dokuments (gespeichert als TextField) und markieren sie dann den üblichen HighlighterSuche in einem bestimmten Dokument nach Erhalt seiner docId

EDIT Umformulierung die Frage dies ist nicht die eigentliche Frage verwenden. Iam einfach versuchen, (mein Bestes) falsch/nicht hilfreich Antworten

Gegeben zu vermeiden, die docId und die Query Objektsuche für die Abfrage angegeben im Query Objekt innerhalb das gegebene Dokument von der docId

+0

warum suchen Sie nicht innerhalb des Inhaltsfeldes des Dokuments direkt. später können Sie filtern mit docId – vinod

+0

Können Sie mir helfen bei der Umsetzung dieser (wenn das nur in diesem Dokument natürlich suchen) – Vulcan

+0

Suche in TextField zuerst dann erhalten Sie Doc-IDs aller Zeichenfolge übereinstimmende Dokumente. etwas wie /select?q=TextField:"querystring"&fl=docID,TextField&hl=true&hl.fl=TextField mit dem Sie alle String-übereinstimmende Doc-ID erhalten, TextField mit Schlüsselwort hervorgehoben. – vinod

Antwort

0

Verwendung Apache Tika in Solr zum Extrahieren und Indizieren von Text des Dokuments. Dokument kann Textdatei, PDF, PPT, XLS, DOC usw. sein.

+0

Ich glaube, dass dies getan werden kann, ohne all das Zeug zu verwenden und Ihre Antwort beantwortet meine Frage nicht – Vulcan

+0

Wenn Sie den Inhalt des Dokuments suchen wollen, nachdem Sie 'docId' des Dokuments erhalten haben, müssen Sie den Inhalt des Dokuments indexieren, bevor Sie nach Suchergebnissen suchen in Echtzeit. Und vor der Indexierung müssen Sie den Inhalt des Dokuments extrahieren, ** Apache Tika ** erledigt diese Aufgabe für Sie mit sehr wenig Aufwand. Es ist nicht notwendig, Solr zu verwenden, Sie können ** Tika ** mit ** Lucene ** -Bibliothek auch verwenden. – hp36

+0

Ich habe bereits den Inhalt meines Dokuments indexiert – Vulcan

0

Wenn Sie Java verwenden, um Ihren Index abzufragen, versuchen Sie diesen. source here

public static void searchIndex(String searchString) throws IOException, ParseException { 
     System.out.println("Searching for '" + searchString + "'"); 
     Directory directory = FSDirectory.getDirectory(INDEX_DIRECTORY); 
     IndexReader indexReader = IndexReader.open(directory); 
     IndexSearcher indexSearcher = new IndexSearcher(indexReader); 

     Analyzer analyzer = new StandardAnalyzer(); 
     QueryParser queryParser = new QueryParser(FIELD_CONTENTS, analyzer); 
     Query query = queryParser.parse(searchString); 
     Hits hits = indexSearcher.search(query); 
     System.out.println("Number of hits: " + hits.length()); 

     Iterator<Hit> it = hits.iterator(); 
     while (it.hasNext()) { 
      Hit hit = it.next(); 
      Document document = hit.getDocument(); 
      String path = document.get(FIELD_PATH); 
      System.out.println("Hit: " + path); 
     } 

    } 
+0

1. Wie ich im Kommentar gesagt habe, glaube ich nicht, dass Sie für die 'docId' 2 abfragen können. Dies ist nur eine einfache Lucene Suche Ich weiß das und das beantwortet meine Frage nicht. ... Ich werde versuchen, meine Frage umzuformulieren – Vulcan

+0

q = title: "searchquery" & fq = docID: 2 & hl = true. Das ist so, als würdest du im Titelfeld suchen und mit docID filtern und es hervorheben. – vinod

+0

Hilf mir bitte mit Thay Syntax. Genauer gesagt, was ist 'fq' und' hl' und ': 2' .... Ich denke' hl' ist Highlight – Vulcan

Verwandte Themen