我正在运行Titan0.4.0,并尝试使用最新的 REGEX es字符串搜索的运算符。

我已经创建了一个索引 my_key 对于我的ES索引命名 search.

gremlin> g.makeKey("my_key").dataType(String.class).indexed("search",Vertex.class).single().make()
==>v[82]

然后我添加一个顶点:

gremlin> v = g.addVertex(null, ["my_key":"123-abc"])
==>v[8]
gremlin> v.map
==>{my_key=123-abc}

REGEX 似乎奏效了。..

gremlin> g.query().has("my_key", REGEX, "[12]{2}3").vertices()
==>v[8]

...但只有在我的标记上 "123""abc" 独立自主:

gremlin> g.query().has("my_key", REGEX, "123").vertices()
==>v[8]
gremlin> g.query().has("my_key", REGEX, "abc").vertices()
==>v[8]

但是,如果我尝试运行与我的完整值匹配的正则表达式,则不会检索我的顶点(以下均未返回结果):

gremlin> g.query().has("my_key", REGEX, "123-abc").vertices()
gremlin> g.query().has("my_key", REGEX, "123.abc").vertices()
gremlin> g.query().has("my_key", REGEX, "[0-9]+.[abc]{3}").vertices()
gremlin> g.query().has("my_key", REGEX, "123.").vertices()

Titan中是否有办法以这种方式查询索引(正则表达式w/o标记化/分析术语)?

有帮助吗?

解决方案

在Titan中直到0.4.0的处理方式可能有点令人困惑,因为字符串在外部索引后端进行索引时总是标记化。这导致字符串被"分块"成单词,非字母字符(以及停用词)被忽略。

在即将发布的泰坦0.4.1版本中,我们将更加明确地说明这一点。查看更新的文档:https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

要点:您现在可以指定您的字符串是"按原样"索引,还是在分析后作为一袋单词索引。对于您的用例,它将是前者。我们还理顺了术语:如果您正在查找匹配正则表达式的字符串中的单词,谓词文本。使用CONTAINS_REGEX。如果希望整个字符串与表达式匹配,请使用文本。正则表达式。

Titan0.4.1目前处于最终预览版,将于下周发布。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top