带有"/"的Lucene queryparser在查询条件中 [英] Lucene queryparser with "/" in query criteria

查看:169
本文介绍了带有"/"的Lucene queryparser在查询条件中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试在Lucene中搜索诸如解决方法/修复程序"之类的内容时,它会引发此错误:

When I try to search for something such as "workaround/fix" within Lucene, it throws this error:

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)

这是我的第111和112行:

This are my lines 111 and 112:

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

我需要做些什么才能允许它解析"/"?

What do I need to do to allow it to parse the "/"?

推荐答案

查询解析器将斜杠解释为开始/结束或正则表达式查询(从4.0开始,请参见

The query parser interprets slashes as the beginning/end or a regex query (as of 4.0, see documentation here).

因此,要将斜杠合并到查询中,您将需要

So, to incorporate slashes into the query, you will need to escape them by adding a backslash (\) before them.

您可以使用

You can handle escaping with QueryParser.escape(String).

这篇关于带有"/"的Lucene queryparser在查询条件中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆