使用Lucene查询相关文档字段

Using Lucene to query related document fields

假设我有通过 DirectedBy 和 Starring 边连接到人物顶点的电影顶点。

考虑这个按预期工作的 OrientDB 查询:

select *, out("DirectedBy").Name, out("Starring").Name from Movie where out("DirectedBy") CONTAINS (Name = 'John Ford')

正确 returns 所有由姓名为 "John Ford" 的人执导的电影。但是,我想使用 Lucene 全文搜索来执行查询以提供更多灵活性。

我想我的索引设置正确,因为直接对 Persons table 的查询成功产生了结果:

select * from person where Name lucene 'John Ford'

然而,在我对 Movie 顶点的查询中尝试使用 Lucene 运算符没有产生任何结果:

select *, out("DirectedBy").Name, out("Starring").Name from Movie where out("DirectedBy") CONTAINS (Name LUCENE 'John Ford')

我是不是做错了什么?还是我想做一些不可能的事情?

为了使用 LUCENE,你应该用它来执行 SELECT,而不是在 contains 里面。试试这个应该超级快:

select *, out("DirectedBy").Name, out("Starring").Name
from (
  select expand( in("DirectedBy") ) from person where Name lucene 'John Ford'
)

内部SELECT使用LUCENE寻找"John Ford",然后通过in("DirectedBy")跨越连接的Movies。我使用 expand() 是因为您需要在显示所需信息的外部 SELECT 中得到该结果。