【问题标题】:Titan ES regex query across tokenized field?跨标记化字段的 Titan ES 正则表达式查询?
【发布时间】:2013-11-16 07:28:42
【问题描述】:

我正在运行 Titan 0.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 中有没有办法以这种方式查询索引(regex w/o tokenized/analyzed terms)?

【问题讨论】:

    标签: elasticsearch gremlin titan


    【解决方案1】:

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

    在即将发布的 Titan 0.4.1 版本中,我们对此进行了更明确的说明。查看更新的文档: https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

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

    Titan 0.4.1 目前处于最终预览阶段,将于下周发布。

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多