假设可能存在索引文档,其中包含“Facebook以19美元B收购WhatsApp”等短语。我想搜索“Facebook [\ s \ w +] * Whatsapp”,并希望所有包含Facebook和WhatsApp的短语用一个词分开(获取,购买等)。
如何在lucene中做到这一点?在50GB语料库中为数以千计的此类查询工作是否足够有效?
P.S。到目前为止,我已经使用RegexpQuery进行了正则表达式搜索,我无法使用多词短语。这是代码中的一行:
Term term = new Term("text", "Facebook[\\s\\w+]*Whatsapp");
Term t = new Term(userQuery);
Query query = new RegexpQuery(term);
答案 0 :(得分: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.3F和http://searchhub.org//2009/07/18/the-spanquery/
UPD。
并确保你的文字" field是一个TextField,所以它是 标记化
- Jeff French