- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Compass/Lucene 来搜索和索引我的数据库。我希望在搜索时忽略变音符号和字符大小写,这样查询“foo”将匹配“Fóo”和“foo”,而查询“fóó”将匹配“fóo”和“fOO”。
根据我所阅读的内容,我似乎需要更改 Compass 在索引和搜索我的上下文时使用的默认分析器。我找到了指定要使用的分析器的位置,但似乎找不到满足我要求的分析器实现。是否已经存在忽略变音符号和字符大小写的分析器,还是我需要自己编写?
最佳答案
看看 org.apache.lucene.analysis.ASCIIFoldingFilter 看看它是否符合您的要求。如果没有,我会使用它的来源作为编写您自己的来源的起点。
您必须使用相同的分析器配置进行索引和查询是正确的,原因很明显,如果您从索引中删除了所有变音符号,则需要从任何查询中删除它们还有。
需要注意的一件事是确保在索引/查询过程中的某处规范化任何 unicode。具体见:http://unicode.org/reports/tr15/ , http://unicode.org/faq/normalization.html , 和 http://docs.oracle.com/javase/6/docs/api/java/text/Normalizer.html .
编辑:正如下面评论中提到的,作为过滤器,您不能直接将 ASCIIFoldingFilter 用作分析器,但是这里有关于将其包含在分析器中的直接说明:stackoverflow.com/a/3834244/390153
编辑:正如@jspboix 在下面的评论中提到的,您还需要链接 LowerCaseFilter 来处理字符大小写。
关于java - 搜索时忽略变音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182020/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!