2010-05-17 4 views
2

Quel est le meilleur moyen de savoir quels termes d'une requête correspondaient à un document donné retourné comme un hit dans lucene? J'ai essayé une méthode bizarre impliquant un paquet de surbrillance dans lucene contrib et aussi une méthode qui recherche chaque mot de la requête par rapport au document le plus haut ("docId: xy AND description: each_word_in_query").lucene obtenir des termes correspondants dans la requête

Vous n'obtenez pas de résultats satisfaisants? La surbrillance des frappes ne signale pas certains des mots correspondant à un document autre que le premier. Je ne suis pas sûr si la deuxième approche est la meilleure alternative.

Répondre

2

La méthode explain dans le moteur de recherche est un bon moyen de voir quelle partie d'une requête a été trouvée et comment elle affecte le score global.

Exemple tiré du livre Lucene En action 2e édition:

public class Explainer { 

    public static void main(String[] args) throws Exception { 

    if (args.length != 2) { 
     System.err.println("Usage: Explainer <index dir> <query>"); 
     System.exit(1); 
    } 

    String indexDir = args[0]; 
    String queryExpression = args[1]; 
    Directory directory = FSDirectory.open(new File(indexDir)); 
    QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, 
            "contents", new SimpleAnalyzer()); 

    Query query = parser.parse(queryExpression); 
    System.out.println("Query: " + queryExpression); 
    IndexSearcher searcher = new IndexSearcher(directory); 
    TopDocs topDocs = searcher.search(query, 10); 
    for (int i = 0; i < topDocs.totalHits; i++) { 
     ScoreDoc match = topDocs.scoreDocs[i]; 
     Explanation explanation = searcher.explain(query, match.doc); 
     System.out.println("----------"); 
     Document doc = searcher.doc(match.doc); 
     System.out.println(doc.get("title")); 
     System.out.println(explanation.toString()); 
    } 
    } 
} 

Cela explique le score de chaque document qui correspond à la requête.

+0

fonctionne-t-il également avec le flou. –

+0

Je veux trouver les termes dans la requête si "chiens" correspond à "chien" dans la requête. Je veux identifier que c'était le terme "chien" dans la requête qui correspondait. –

+0

pourriez-vous donner un exemple de code –

0

Pas encore essayé, mais jetez un oeil à l'implémentation de org.apache.lucene.search.highlight.QueryTermExtractor.

Questions connexes