是否可以使用 Lucene SpanQuery 来查找“红色”“绿色”和“蓝色”这两个词都出现在一个句子中的所有事件?
我的第一个(不完整/不正确)方法是编写一个分析器,将一个特殊的句子标记标记和句子的开头放置在与句子的第一个单词相同的位置,然后查询类似于以下内容的内容:
SpanQuery termsInSentence = new SpanNearQuery(
SpanQuery[] {
new SpanTermQuery( new Term (MY_SPECIAL_SENTENCE_TOKEN)),
new SpanTermQuery( new Term ("red")),
new SpanTermQuery( new Term ("green")),
new SpanTermQuery( new Term ("blue")),
},
999999999999,
false
);
SpanQuery nextSentence = new SpanTermQuery( new Term (MY_SPECIAL_SENTENCE_TOKEN));
SpanNotQuery notInNextSentence = new SpanNotQuery(termsInSentence,nextSentence);
当然,问题在于这nextSentence
并不是真正的下一个句子,而是任何句子标记,包括句子中termsInSentence
匹配的那个。因此这是行不通的。
我的下一个方法是创建将标记放在句子之前的分析器(即在第一个单词之前,而不是在与第一个单词相同的位置)。问题是我必须考虑由MY_SPECIAL_SENTENCE_TOKEN
. 更重要的是,当我使用幼稚模式拆分句子(例如 split on /\.\s+[A-Z0-9]/
)时,这首先会特别糟糕,因为当我搜索USS Enterprise时,我必须考虑所有(错误)句子标记。
那么......我应该如何处理这个?