2010-03-26 26 views
8

Lorsque j'utilise Luke pour rechercher mon index Lucene à l'aide d'un analyseur standard, je peux voir le champ que je cherche contient des valeurs du formulaire MY_VALUE. Lorsque je recherche un champ: "MY_VALUE" cependant, la requête est analysée en tant que champ: "ma valeur"Lucene recherche et caractères de soulignement

Existe-t-il un moyen simple d'échapper le trait de soulignement (_) pour qu'il le recherche?

EDIT:

4/1/2010 11:08 HNP

Je pense qu'il ya un bug dans le tokenizer pour Lucene 2.9.1 et il était probablement là avant. Chargez Luc et essayer de chercher « BB_HHH_FFFF5_SSSS », quand il y a un certain nombre, les jetons suivants sont renvoyés:

« bb hhh_ffff5_ssss »

Après quelques tests, j'ai trouvé que cela est dû le nombre. Si je entrée

« BB_HHH_FFFF_SSSS », je reçois

« bb hhh ffff ssss »

A ce moment, je me penche vers un bug tokenizer à moins que la présence du nombre est censé avoir cette comportement mais je ne vois pas pourquoi.

Est-ce que quelqu'un peut le confirmer?

Répondre

1

Il ne semble pas que vous ayez utilisé StandardAnalyzer pour indexer ce champ. Dans Luke, vous devrez sélectionner l'analyseur que vous avez utilisé pour indexer ce champ afin de correspondre correctement à MY_VALUE. Incidemment, vous pourriez être en mesure de faire correspondre MY_VALUE en utilisant le KeywordAnalyzer.

+0

Non, j'ai utilisé l'analyseur standard comme indexeur, c'est pourquoi c'est bizarre. – Matt

+3

Si vous avez indexé en utilisant l'analyseur standard, votre index contiendra "my" et "value" comme deux jetons différents. Essayez de chercher "ma valeur" (y compris les citations) et vous pourriez obtenir des résultats. – Thomas

+0

Je voudrais vérifier quel analyseur vous utilisez pour l'indexation. Si vous avez utilisé StandardAnalyzer pour l'indexation, il est impossible d'utiliser MY_VALUE comme terme, car StandardAnalyzer se divise toujours sur les traits de soulignement. – bajafresh4life

1

Je ne pense pas que vous serez en mesure d'utiliser l'analyseur standard pour ce cas d'utilisation. Si vous estimez que vos besoins sont, le mot-clé analyseur devrait fonctionner correctement pour peu d'effort (le champ entier devient un terme unique).

Je pense qu'une partie de la confusion survient lorsqu'on regarde le champ avec luke. La valeur stockée est et non ce qui est utilisé par les requêtes, ce dont vous avez besoin sont les termes. Je soupçonne que lorsque vous regardez les termes stockés pour votre champ, ils seront "mon" et "valeur".

Espérons que cela aide,