是否有可能使用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
。 更重要的是,这将尤其是在第一个坏,当我用幼稚的图案拆分句子(例如,分上/\.\s+[A-Z0-9]/
),因为我必须考虑到所有的当我搜索企业号航空母舰 (假)句子标记。
所以......我应该怎么处理这个?