【问题标题】:Neo4J how to call db.index.fulltext.queryNodes on a nodes subset (instead of doing the search on every node in DB)?Neo4J 如何在节点子集上调用 db.index.fulltext.queryNodes(而不是在 DB 中的每个节点上进行搜索)?
【发布时间】:2022-01-23 12:28:40
【问题描述】:

我有以下数据模型:

(org:Organization {name_en:'Org name in English', 'name_fr': 'Org name in French', 'anotherProperty': 'a value'})

我在名称的属性(name_en 和 name_fr)上配置了全文搜索索引。

如果我想对名字进行模糊搜索,我必须写如下:

CALL db.index.fulltext.queryNodes("myOrgNameIndex", 'something~') YIELD node RETURN node

但是,我总是必须执行第一次 MATCH 以获取基于“anotherProperty”的组织节点子集。因此,不是在我的数据库的所有组织节点上进行模糊搜索(很多......),而不是作为第一个操作,我想先用 WHERE 做一个 MATCH,然后根据“第一个”查询的结果

我该怎么做?有没有可能?

已经感谢您的回复。

【问题讨论】:

  • 您需要在全文索引中添加其他属性并在查询中使用它们。

标签: neo4j cypher full-text-search


【解决方案1】:

您可以在 CALL 中添加 WHERE 子句,如下所示

CALL db.index.fulltext.queryNodes("myOrgNameIndex", 'something~') YIELD node 
    WHERE node.anotherProperty = 'foo'
RETURN node

【讨论】:

  • 是的,但不幸的是,通过这样做,WHERE 过滤器在来自过程调用的(可能很大)结果集上完成。
  • @koD 是的,根据我的分析器看来是这样。显然 Neo4j 的数据库引擎不能减少我猜的 lucene 索引的范围。
猜你喜欢
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多