当前位置: 首页 > 知识库问答 >
问题:

lucene查询特殊字符

汲涵育
2023-03-14

我很难理解如何处理lucene中的特殊角色
我的分析器没有停止字,因此不会删除特殊字符:

CharArraySet stopwords = new CharArraySet(0, true);
return new GermanAnalyzer(stopwords);  

比我创建文档要多:

doc.add(new TextField("tags", "23", Store.NO));
doc.add(new TextField("tags", "Brüder-Grimm-Weg", Store.NO));

查询标签:brüder\-g工作正常,但是模糊查询标签:brüder\-g~不返回任何内容。当街道名称为Eselgasse查询标签时:Esel~将正常工作。
我使用Lucene 5.3.1

谢谢你的帮助!

共有1个答案

夏侯和韵
2023-03-14

QueryParser不分析模糊查询(以及通配符或正则表达式查询)。

例如,如果您使用的是StandardAnalyzer,“Brüder Grimm Weg”将被索引为三个术语,“Brüder”、“Grimm”和“Weg”。因此,经过分析,您有:

>

  • "tags: brüder\-g"--

    “标签:brüder \-g~”--

  •  类似资料:
    • 事情是这样的。我有一个术语存储在索引中,它包含特殊字符,比如'-',最简单的代码是这样的: 然后使用QueryParser创建一个查询,如下所示: 不使用QueryParser而直接使用TermQuery可以做我想做的事情,但是这种方式对于用户输入文本来说不够灵活。 我想可能StandardAnalyzer做了一些事情来省略查询字符串中的特殊字符。我尝试了debug,我发现字符串是拆分的,实际查询

    • 要转义这些字符,请在字符前面使用\。例如,要搜索(1+1):2,请使用以下查询: 为此,我使用方法: 我使用经典分析器是因为我注意到标准分析器在转义特殊字符方面存在一些问题。 null

    • 我有一个集合的联系人结构如下: 因为“susan@xpto.com”上的点 如何逃脱这点? 我尝试了和但没有成功。

    • 问题内容: 我正在使用SQL Server 2005。 我只需要找出在``ody’‘栏中有特殊字符的那些行。在以下情况下,结果应仅是TemplateID = 2的行。我们如何为此编写查询? 除了以下内容,此情况下的其他任何字符都是特殊字符 问题答案: 方括号之间的内容是数字(0-9),小写字母(az),大写字母(AZ)和空格。其中的“ ^”表示“不”。请注意,这与“不喜欢’%[0-9a-zA-Z]

    • 我必须将此添加到我执行的每个搜索查询中。我有一个大约20,000个文档的索引,我真的不想重建它,因为我在上一个版本中让我的用户重建了他们的索引。注意:这是在android设备上,所以需要很长的时间和大量的电池来重新索引他们的所有文档。 谢谢你的帮助。