Pergunta

Eu estou correndo Titan 0.4.0 e estou tentando usar o mais recente REGEX operador para o ES de seqüência de caracteres de pesquisa.

Eu criei um índice my_key para o meu ES índice chamado search.

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

Em seguida, adicionar um vértice:

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

O REGEX parece funcionar...

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

...mas apenas no meu tokenized "123" e "abc" de forma independente:

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

No entanto, se eu tentar executar uma expressão regular que corresponde a todo o meu valor, a minha vértice não é recuperada (nenhum dos seguintes resultados de retorno):

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

Existe uma maneira em Titan consultar o índice desta maneira (regex s/em/analisado termos)?

Foi útil?

Solução

A forma como isso foi tratado no Titan até 0.4.0 pode ser um pouco confuso, porque as cadeias estão sempre simbolizado quando eles são indexados externo e indexação de back-end.Isto leva a cadeias de ser "partes" em palavras um caractere que não seja letra (bem como stop words) sendo ignorado.

No próximo Titan versão 0.4.1 estamos fazendo isso mais explícito.Ter um olhar para a documentação atualizada:https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

A ideia:Agora você pode especificar se você deseja que sua cadeias de caracteres indexados "como é" ou como um saco de palavras após análise.Para o caso de uso, ele seria o primeiro.Nós também endireitaram-se a terminologia:Se você estiver procurando por palavras em uma seqüência de caracteres correspondente a uma expressão regular, o predicado de Texto.CONTAINS_REGEX é usado.Se você quiser toda a cadeia de corresponder a uma expressão, use o Texto.REGEX.

Titan 0.4.1 está atualmente em fase final de pré-visualização e será lançado na próxima semana.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top