微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lucene QueryParser忽略搜索词“ BE”

如何解决Lucene QueryParser忽略搜索词“ BE”

| 我正在尝试搜索几个字段,除非我使用术语“ BE”,否则它可以正常工作。在这种情况下,lucene只会忽略该字段。如果执行如下所示的操作,我将得到正确的结果,并且“ query \”对象显示为\“ + flag:bf + type:cgo \”。如果我将标志或类型术语设置为\“ BE \”,则搜索的一部分将被忽略。 例如,如果我将queryString设置为\“ flag:\\\” BE \\\“ AND类型:\\\” CGO \\\“ \”,则查询对象将显示为:\“ + type:cgo \ ”,我将获得更多点击。 \“ type \”也会发生同样的情况-如果在上一个示例中将\“ CGO \”更改为\“ BE \”,它将被忽略。我没有尝试过所有可能的2个字符组合(但是我尝试了很多),但除此以外,所有工作都按预期进行。我没有使用任何停止条款。 谢谢, 基因
String queryString = \"flag:\\\"BF\\\" AND type:\\\"CGO\\\"\";
QueryParser qp  = new QueryParser(Version.LUCENE_30,\"type\",new StandardAnalyzer(Version.LUCENE_30));

Query query = qp.parse(queryString);
IndexSearcher searcher = new IndexSearcher(reader.reopen());
TopDocs td = searcher.search(q,5000);
logger.info(\"Found \" + td.totalHits + \" hits using \" + query.toString() );
    

解决方法

        默认情况下,StandardAnalyzer使用一组停用词从文本中的索引术语中排除\“ noise \”。我认为,在StandardAnalyzer的上下文中,“ BE”通常被视为停用词。 幸运的是,您可以选择几种方法 显而易见的一个方法是将一组空的停用词传递给所使用的StandardAnalyzer的构造函数。 但是,查看您的字段名称(\“ flag \”和\“ type \”),它们看起来并不完全像打算包含简单的文本,而是更有可能包含编码的单词。考虑到这一点,您可能会发现关键字分析器更合适。 祝好运,     ,        您确实在使用停用词,尽管您可能不会尝试:
QueryParser qp  = new QueryParser(Version.LUCENE_30,\"type\",new StandardAnalyzer(Version.LUCENE_30));
StandardAnalyzer
默认情况下使用标准英语停用词,其中包括\“ be \”。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。