2013-07-22 13 views
8

Quando provo a cercare qualcosa come "workaround/fix" all'interno di Lucene, getta questo errore:Lucene queryparser con "/" in Query criteri

org.apache.lucene.queryparser.classic.ParseException: Cannot parse 'workaround/fix': Lexical error at line 1, column 15. Encountered: <EOF> after : "/fix" 
    at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:131) 
    at pi.lucengine.LucIndex.main(LucIndex.java:112) 
Caused by: org.apache.lucene.queryparser.classic.TokenMgrError: Lexical error at line 1, column 15. Encountered: <EOF> after : "/fix" 
    at org.apache.lucene.queryparser.classic.QueryParserTokenManager.getNextToken(QueryParserTokenManager.java:1133) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_scan_token(QueryParser.java:599) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_3R_2(QueryParser.java:482) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_3_1(QueryParser.java:489) 
    at org.apache.lucene.queryparser.classic.QueryParser.jj_2_1(QueryParser.java:475) 
    at org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:226) 
    at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:181) 
    at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:170) 
    at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:121) 

Questo sono le mie linee 111 e 112:

QueryParser parser = new QueryParser(Version.LUCENE_43, field, analyzer); 
Query query = parser.parse(newLine); 

Cosa devo fare per consentirmi di analizzare "/"?

risposta

14

Il parser di query interpreta le barre come inizio/fine o una query regolare (a partire da 4.0, vedere documentation here).

Quindi, per incorporare le barre nella query, è necessario aggiungere escape them aggiungendo una barra rovesciata (\).

È possibile gestire l'escape con QueryParser.escape(String).

2

Ho riscontrato un problema simile quando si utilizza "/" nelle query lucene emesse dal cruscotto di ricerca elastica kibana. Stavo sfuggendo ai caratteri '/' come indicato nella documentazione e ancora non ottenendo alcun successo. Penso che questo sia correlato al bug del modello riportato qui: https://github.com/elastic/kibana/issues/789. Non ancora sicuro, verrà aggiornato quando si aggiorna i componenti logstash

0

ho avuto un caso in cui durante l'utilizzo di barra con jolly semplicemente non sarebbe tornato alcun risultato, anche se sfuggì esso:

+(*16/17*) 
+(*16\/17*) 

La soluzione era aggiungere una doppia citazione:

+("*16/17*") 
+("*16\/17*") 
Problemi correlati