经过多次谷歌搜索后,我决定在这里发布我的问题,希望有人帮助我。我想要实现的是执行如下查询:
q1: (adjective) "jumps" (preposition) // any adj followed by "jumps" followed by any prep.
q2: (adjective:brown) "jumps" (preposition) // brown as adj. followed by "jumps" followed by any prep.
q3: (adjective:brown) (verb:jumps) (preposition) // brown as adj followed by jumps as verb followed by any preposition.
在更一般的形式中,我想要的是
(POS[:specific_word]) (POS[:specific_word]) (POS[:specific_word])
为此,我的文字标记如下:
the|[pos:DT][lemma:the] quick|[pos:JJ][lemma:quick] brown|[pos:JJ][lemma:brown] fox|[pos:NN][lemma:fox] jumps|[pos:NNS][lemma:jump] over|[pos:IN][lemma:over] the|[pos:DT][lemma:the] lazy|[pos:JJ][lemma:lazy] dog|[pos:NN][lemma:dog]
我想到的第一件事就是将每个术语的额外信息编入索引,然后使用PayloadNearQuery来访问每个范围的有效负载。问题是PayloadNearQuery首先匹配术语然后访问其有效负载,因此上述3个查询都不起作用。 (如果我错了,请纠正我)
我想到的第二件事是将额外信息编入索引作为术语的同义词,但是这样,第二个查询不会起作用,因为我无法询问第一个术语是否是一个adj而是具体的字#"布朗"同时进行。
任何解决此问题的方法,建议等都将受到赞赏。