执行 Lucene 搜索查询“Contains”

发布于 2024-11-23 20:50:21 字数 560 浏览 1 评论 0原文

我正在搜索包含用户输入的文本的文档

如果 searchText 中没有任何特殊字符,则效果很好。

下面是我创建 QueryParser 的方法。 :

//analyzer is an StandardAnalyzer()
  QueryParser parser = new QueryParser("Text", analyzer);
            parser.SetAllowLeadingWildcard(true);
            return parser.Parse(string.Format("*{0}*", searchText));

如果搜索文本中包含任何特殊字符,我会收到以下错误:

假设搜索文本是“bed [”

Cannot parse '*bed [*': Encountered "<EOF>" at line 1, column 7.

如果搜索文本中存在任何特殊字符并且我怎样才能使我的查询解析器不会失败不想忽略特殊字符。

I am doing search for documents that contains the text entered by user

It works fine if the searchText don't have any special characters in it.

Below is how i create my QueryParser. :

//analyzer is an StandardAnalyzer()
  QueryParser parser = new QueryParser("Text", analyzer);
            parser.SetAllowLeadingWildcard(true);
            return parser.Parse(string.Format("*{0}*", searchText));

I get the following error if the search text contains any special character in it :

suppose say search text is "bed ["

Cannot parse '*bed [*': Encountered "<EOF>" at line 1, column 7.

How can i make my query parser not fail if there are any special characters in search text and also i don't want to ignore the special characters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沉默的熊 2024-11-30 20:50:21

尝试使用:

QueryParser parser = new QueryParser("Text", analyzer);
parser.SetAllowLeadingWildcard(true);
var escapedSearchText = QueryParser.Escape(searchText);
return parser.Parse(string.Format("*{0}*", escapedSearchText));

即在构建查询之前转义搜索文本。

希望这有帮助,

Try using:

QueryParser parser = new QueryParser("Text", analyzer);
parser.SetAllowLeadingWildcard(true);
var escapedSearchText = QueryParser.Escape(searchText);
return parser.Parse(string.Format("*{0}*", escapedSearchText));

i.e. escape the search text before building your query.

Hope this helps,

树深时见影 2024-11-30 20:50:21

Lucene 支持转义查询语法中的特殊字符。当前列表特殊字符是

    • && || ! ( ) { } [ ] ^ " ~ * ? : \

要转义这些字符,请在字符前使用 \。例如,要搜索 (1+1):2,请使用查询:

(1+1)\:2

Lucene supports escaping special characters that are part of the query syntax. The current list special characters are

    • && || ! ( ) { } [ ] ^ " ~ * ? : \

To escape these character use the \ before the character. For example to search for (1+1):2 use the query:

(1+1)\:2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文