elasticsearch,titan,Regex,Indexing,elasticsearch,Titan" /> elasticsearch,titan,Regex,Indexing,elasticsearch,Titan" />

Regex Aurelius Titan和Elasticsearch包含未给出结果的正则表达式

Regex Aurelius Titan和Elasticsearch包含未给出结果的正则表达式,regex,indexing,elasticsearch,titan,Regex,Indexing,elasticsearch,Titan,我在Cassandra上运行了一个基本的Titan实例,其中包含用于全文索引的弹性搜索(下面是se的设置) 使用CONTAINS_REGEX时,如果字符串参数不包含任何分隔符(如空格或),弹性搜索索引似乎无法正确返回 例如: g.V().has('name', "somename") //This exist ==> v[123456] g.V().has('name', CONTAINS_REGEX, ".*somename.*") //This does not find the v

我在Cassandra上运行了一个基本的Titan实例,其中包含用于全文索引的弹性搜索(下面是se的设置)

使用
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)中已经起作用。也许有什么我不知道的改变了,现在应该改变。然而,我在文档中找不到任何东西。也可能是泰坦或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版本“1.7.0_65”、OpenJDK运行时环境(IcedTea 2.5.1)(7u65-2.5.1-5~deb7u1)、OpenJDK 64位服务器虚拟机(构建24.65-b04,混合模式)
数据库模式的索引部分:

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")

小提示:我知道我可以使用
映射.STRING.getParameter()
代替
文本
,然后使用
g.V().has('name',REGEX,.*somename.*)
,但我始终无法让字符串索引工作。我也知道
CONTAINS_REGEX
是用于较长文本中的每个单词的,但我始终无法使字符串版本正常工作。

在翻阅错误日志和测试大量内容后,我发现问题在于一些java进程内存不足。特别是雷克斯特

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

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

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

现在一切似乎都很顺利!:)

总而言之:问题在于Rexster在存储到cassandra和初始化elasticsearch索引之间崩溃,因为缺少ram

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