【问题标题】:How to search for a Pattern in Lucene?如何在 Lucene 中搜索模式?
【发布时间】:2014-05-10 09:43:20
【问题描述】:

假设可能存在包含诸如“Facebook 以 $19 B 收购 WhatsApp”之类的短语的索引文档。我想搜索“Facebook[\s\w+]*Whatsapp”,并期望所有包含 Facebook 和 WhatsApp 的短语都由一个单词分隔(获取、购买等)。

如何在lucene中做到这一点?在 50GB 的语料库中处理数千个此类查询是否足够高效?

附言到目前为止,我已经尝试使用 RegexpQuery 进行正则表达式搜索,但无法处理多词短语。这是代码中的一行:

Term term = new Term("text", "Facebook[\\s\\w+]*Whatsapp");
Term t = new Term(userQuery);
Query query = new RegexpQuery(term);

【问题讨论】:

  • IIRC 你应该使用SpanQuery

标签: regex search lucene wildcard


【解决方案1】:

您可以使用查询“Facebook Whatsapp”~1,因此所有文档将被匹配,其中单词之间的距离将小于或等于 1

更多信息 - http://wiki.apache.org/lucene-java/LuceneFAQ#Is_there_a_way_to_use_a_proximity_operator_.28like_near_or_within.29_with_Lucene.3Fhttp://searchhub.org//2009/07/18/the-spanquery/

UPD。

还要确保您的“文本”字段是 TextField,因此它是 标记化。

– 杰夫法兰西

【讨论】:

  • 还要确保你的“文本”字段是TextField,所以它被标记化了。
猜你喜欢
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多