2017-09-18 3 views
0

Je la configuration suivante:Comment WordDelimiterFilterFactory recherche-t-il par jeton avec des chiffres?

@AnalyzerDef(name = "autocompleteNGramAnalyzer", 

// Split input into tokens according to tokenizer 
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), 

filters = { 
    // Normalize token text to lowercase, as the user is unlikely to 
    // care about casing when searching for matches 
    @TokenFilterDef(factory = WordDelimiterFilterFactory.class), 

    @TokenFilterDef(factory = LowerCaseFilterFactory.class), 
    @TokenFilterDef(factory = EdgeNGramFilterFactory.class, params = { 
     @Parameter(name = "minGramSize", value = "2"), 
     @Parameter(name = "maxGramSize", value = "5") }) }) 

Cela fonctionne presque comme prévu, mais ont des problèmes avec des mots qui contiennent des chiffres.

Par exemple:

Par ab retourne lucene jeton abcdefg, mais si je dois trouver a1 et il y a a1b1c1d1 il ne retourne rien

Comment puis-je changer cette configuration?

Répondre

0

Sauf si vous avez d'autres exigences que vous n'avez pas mentionnés, vous devriez essayer d'enlever WordDelimiterFilterFactory, ou tout au moins la configuration correctement (réglage preserveOriginal à 1 en particulier) si vous avez vraiment besoin certaines de ses caractéristiques.

Par défaut, je pense que WordDelimiterFilter transforme "a1b1c1d1" en quelque chose comme ["a", "1", "b", "1", "c", "1", "d", "1"], ce que je doute est utile dans un champ "autocomplete".

+0

Où puis-je lire plus de détails sur ces usines? – gstackoverflow

+0

@gstackoverflow 1. Jetez un oeil à leur javadoc, ou 2. Jetez un oeil à ce wiki non officiel: https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters –