【问题标题】:Aurelius Titan and Elasticsearch CONTAINS_REGEX not giving resultsAurelius Titan 和 Elasticsearch CONTAINS_REGEX 未给出结果
【发布时间】:2014-12-22 14:07:45
【问题描述】:

我有一个在 Cassandra 上运行的基本 Titan 实例,具有用于全文索引的弹性搜索(请参阅下面的设置)。

当字符串参数不包含任何分隔符(如空格或.)时,使用CONTAINS_REGEX 时,弹性搜索索引似乎无法正确返回。

例子:

g.V().has('name', "somename") //This exist
==> v[123456] 
g.V().has('name', CONTAINS_REGEX, ".*somename.*") //This does not find the vertex.
==> null
g.V().has('name', CONTAINS_REGEX, ".*omenam.*") //Nor does this..
==> null
g.V().has('name', CONTAINS_REGEX, "somename") //Or this..
==> null
g.V().has('name', CONTAINS_REGEX, "^somename$") //String start + end does not work.
==> null

g.V().has('name', "somename.two") //If the name has a separator in it, then CONTAINS_REGEX works as expected
==> v[23456]
g.V().has('name', CONTAINS_REGEX, ".*somename.*")
==> v[23456]
g.V().has('name', CONTAINS_REGEX, ".*omenam.*")
==> v[23456]
g.V().has('name', CONTAINS_REGEX, "somename\\.two")
==> v[23456]

//Changing to the new syntax also does not work as expected.
g.query().has('name', CONTAINS_REGEX, ".*somename.*").vertices()

因此,如您所见,当字符串不包含任何空格或其他分隔符时,CONTAINS_REGEX 的行为似乎不正确。这适用于以前的版本(0.4.X)。也许有些事情发生了我不知道的变化,现在应该以不同的方式进行。但是,我无法在文档中找到任何内容。也可能是我没有正确设置titan或ES中的某些设置,但同样,我找不到任何东西。

任何帮助将不胜感激:)

我正在插入这样的名称:

def get_or_create_name(g, name)
{
    nv = g.V('name', name);
    if(!nv.hasNext())
    {
        ret = g.addVertexWithLabel('name');
        ElementHelper.setProperties(ret, 'name', name);
    }
    else
    {
        ret = nv.next();
    }
    ret
}

使用:

  • 泰坦 0.5.2
  • Debian 7.6
  • Java java version "1.7.0_65", OpenJDK Runtime Environment (IcedTea 2.5.1) (7u65-2.5.1-5~deb7u1), OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

数据库架构的索引部分:

name_label = mgmt.makeVertexLabel("name").make()
name = mgmt.makePropertyKey('name').dataType(String.class).make()

name_uniqueness = mgmt.buildIndex("name_uniqueness",Vertex.class).addKey(name).unique().buildCompositeIndex();
mgmt.setConsistency(name_uniqueness, ConsistencyModifier.DEFAULT); //Not sure if this is needed

mgmt.buildIndex('name_index',Vertex.class).addKey(name,Mapping.TEXT.getParameter()).buildMixedIndex("search")

小记:我知道我可以使用Mapping.STRING.getParameter() 代替TEXT,然后使用g.V().has('name', REGEX, ".*somename.*"),但我始终无法让字符串索引工作全部。我也知道CONTAINS_REGEX 旨在用于较长文本中的每个单词,但同样,我无法让字符串版本正常工作。

【问题讨论】:

    标签: regex indexing elasticsearch titan


    【解决方案1】:

    在挖掘了错误日志并测试了很多东西后,我发现问题在于某些 java 进程内存不足。特别是 Rexster。

    我所做的是增加可用内存并稍微调整 java 选项。

    因此,在bin/rexster.sh 我更改了这一行:

    JAVA_OPTIONS="-server -Xms128m -Xmx512m -Dtitan.logdir=$LOG_DIR"
    

    收件人:

    JAVA_OPTIONS="-server -Xms128m -Xmx2g -XX:-UseConcMarkSweepGC -Dtitan.logdir=$LOG_DIR"
    

    现在一切似乎都运行良好! :)

    回顾一下:问题是由于缺少内存,Rexster 在存储到 cassandra 和初始化弹性搜索索引之间崩溃了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多