Pourquoi la requête générique "dog # V *" ne parvient-elle pas à récupérer un document contenant "dog # VVP"?Caractères génériques dans Lucene
Le code suivant écrit en Jython pour Lucene 3.0.0 ne parvient pas à récupérer le document indexé. Est-ce que je manque quelque chose?
analyzer = WhitespaceAnalyzer()
directory = FSDirectory.open(java.io.File("testindex"))
iwriter = IndexWriter(directory, analyzer, True, IndexWriter.MaxFieldLength(25000))
doc = Document()
doc.add(Field("sentence", "dog#VVP", Field.Store.YES, Field.Index.ANALYZED))
iwriter.addDocument(doc)
iwriter.close()
directory.close()
parser = QueryParser(Version.LUCENE_CURRENT, "sentence", analyzer)
directory = FSDirectory.open(java.io.File("testindex"))
isearcher = IndexSearcher(directory, True) # read-only=true
query = parser.parse("dog#V*")
hits = isearcher.search(query, None, 10).scoreDocs
print query_text + ":" + ", ".join([str(x) for x in list(hits)])
sortie est:
dog#V*:
Il ne retourne rien. Je vois le même comportement pour le chien # VV * ou avec des caractères séparateurs autres que "#" (j'ai essayé "__" et "aaa"). Fait intéressant, les requêtes suivantes fonctionnent: chien # ???, chien # *.
Merci! Cela résout mon problème actuel. Pour autant que je sache, LowerCase est juste un autre filtre dans WhitespaceAnalysis. Je vais essayer de voir ce qui se passe si j'utilise ma propre classe d'analyse personnalisée (qui utilisera un turboLowerCase), mais y a-t-il quelqu'un qui pourrait expliquer le mécanisme et la logique derrière ce défaut? –
@ Amaç - Notez que les minuscules ne font PAS partie de WhiteSpaceAnalyzer, mais plutôt un comportement par défaut de l'analyseur de requête. Par conséquent, si vous souhaitez modifier les minuscules, vous devez soit définir l'indicateur comme suggéré par Jonathan, soit écrire votre propre classe d'analyseur de requête. –
Et le commentaire de Yuval corrige mon malentendu à propos du comportement en minuscules. Tout est clair maintenant, merci encore. –