是否可以使用Lucene SpanQuery來查找所有出現的術語「紅色」「綠色」和「藍色」都出現在單個句子中的所有事件?使用Lucene SpanQueries進行句子感知搜索
我的第一個(不完整/不正確)方法是編寫一個分析器,它將一個特殊的句子標記標記和一個句子的開頭放置在與該句子的第一個單詞相同的位置,然後查詢類似於以下:
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]/
),這首先會特別糟糕,因爲當我搜索USS Enterprise時,我將不得不考慮所有(虛假)句子標記。
那麼...我該如何處理這個問題呢?