Lucene - Exacte correspondance de chaîne
Je suis en train de créer un Lucene 4.10 de l'index. Je veux juste enregistrer dans l'index de l'exacte des chaînes que j'ai mis dans le document, sans segmentation.
Je suis en utilisant le StandardAnalyzer.
Directory dir = FSDirectory.open(new File("myDire"));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc);
StringField field1 = new StringField("1", content1, Store.YES);
StringField field2 = new StringField("2", content2, Store.YES);
StringField field3 = new StringField("3", content3, Store.YES);
doc.add(field1);
doc.add(field2);
doc.add(field3);
writer.addDocument(doc, analyzer);
writer.close();
Si j'ai l'impression de l'index de contenu, je peux voir que mes données soient stockées, par exemple, de mon document a cette "zone 3":
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<3:"Fuel Tank Capacity"@en>
Je suis en train d'interroger l'index afin de le récupérer:
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("3", analyzer);
String queryString = "\"\"Fuel Tank Capacity"\@en\"";
Query query = parser.createPhraseQuery("3", QueryParser.escape(queryString));
TopDocs docs = searcher.search(query, null, 20);
Je suis en train de rechercher le terme "Capacité du Réservoir de Carburant"@fr (guillemets compris) donc j'ai essayé de leur échapper et j'ai mis un autre couple de guillemets autour des termes dans le but de laisser lucene comprendre que je suis à la recherche de l'ensemble des textes.
Si j'ai l'impression de la requête, j'obtiens:
3:"capacité du réservoir de carburant fr"
mais je ne veux pas de scinder le texte sur le symbole@.
Je pense que mon premier problème est le StandardAnalyzer, car il semble que pour marquer, si je ne me trompe pas. Cependant, je ne comprends pas comment interroger l'index afin d'obtenir exactement "Capacité du Réservoir de Carburant"@fr (guillemets compris).
Merci
OriginalL'auteur LucaT | 2014-09-12
Vous devez vous connecter pour publier un commentaire.
Vous pourrait simplifier les choses, et il suffit de couper le
QueryParser
de l'équation entièrement. Puisque vous utilisez unStringField
, tout le contenu du champ est un terme unique, de sorte qu'un simpleTermQuery
devrait bien fonctionner:OriginalL'auteur femtoRgon
Lors de l'évacuation de devis (ou tout autre symbole spécial dans Lucene), vous devez utiliser \, mais n'oubliez pas que la barre oblique inverse doit être échappés à l'intérieur de Java string.
Suivant fonctionne pour moi:
Comment ai-je arriver à cela?
"Fuel Tank Capacity"@en
"
avec\
):\"Fuel Tank Capacity\"@en
"\"Fuel Tank Capacity\"@en"
\"\\\"Fuel Tank Capacity\\\"@en\"
OriginalL'auteur mindas