使用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 中得到该结果。
假设我有通过 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 中得到该结果。