【问题标题】:Lucene 6.2 and ISO-8859-1 (latin) charactersLucene 6.2 和 ISO-8859-1(拉丁)字符
【发布时间】:2017-01-04 22:17:57
【问题描述】:

我正在一个项目中尝试使用 Lucene 索引搜索器。

索引文档的内容包含拉丁 (ISO-8859-1) 字符,因此用户可以(也将)使用此字符集进行搜索。

据我所知,Lucene 使用 UTF-8 生成索引文件。

问题:

1) 使用 Lucene 搜索时,有什么方法可以指定字符集吗?还是我必须手动将查询转换为 UTF-8,然后运行搜索?

2) IndexSearcher.search() 方法不会忽略空格,因此我必须猜测“标记”是否正确才能显示任何有意义的结果。如果用户忘记在搜索词上添加空格,则不会显示任何结果。有什么方法可以将搜索器(或 QueryParser)配置为忽略空格?

【问题讨论】:

    标签: lucene iso-8859-1


    【解决方案1】:
    1. 不太清楚你在哪里遇到了麻烦。我假设您正在将用户输入作为字符串读取,所以我不知道问题会出现在哪里。提供您的代码可能会澄清这一点。如果您确实是从用户输入中读取字节数组,那么是的,转换是必要的。不过,将 byte[] 转换为 String 并不是一个费力的过程。只需使用String ctor

    2. 如果您拥有 passed it 的分析器这样做,QueryParser 会在空格处进行标记。 StandardAnalyzer 是典型的选择。

    【讨论】:

    • 1.我不是从字节数组中读取然后进行转换,它只是字符串。但是用户可以使用诸如“ãáéóíõ”等字符进行搜索。所以我只是想知道 API 上是否有任何选项可以正确过滤它们,因为生成的索引文件忽略了重音字符。如果没有,我将继续使用旧的 Normalizer,在搜索之前将其删除。
    • 2.谢谢,我已经在使用它了: Analyzer analyzer = new StandardAnalyzer(); QueryParser queryParser = new QueryParser(字段,分析器);查询查询 = queryParser.parse(searchedValue);但如果用户忘记在搜索词上添加空格,则不会返回任何结果。
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2016-11-26
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2012-09-29
    相关资源
    最近更新 更多