我在Cassandra上运行了一个基本的Titan实例,弹性搜索全文索引(下面是设置)。
当字符串参数不包含任何像空格或CONTAINS_REGEX
这样的sepertors时,弹性搜索索引在使用.
时似乎没有正确返回。
示例:
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
}
使用:
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)
db模式的索引部分:
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
旨在用于较长文本中的每个单词,但同样,我再也无法使字符串版本起作用。
答案 0 :(得分:0)
在深入了解错误日志并测试大量内容后,我发现问题在于某些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和弹性搜索索引的初始化之间崩溃,因为没有ram。