#arangodb #aql
#arangodb #aql
Вопрос:
Скажем, у меня есть вершины со свойством «text» и полнотекстовым индексом для этого свойства.
В оболочке arango 2.1.2 я могу запрашивать вершины с помощью
g._vertices.fulltext("text","my text value")
или db.v.fulltext("text","my text value")
Но если я использую blueprints-arangodb-graph-1.0.8, запрос, который запускает реализация blueprint, выглядит так
http://{arangodb}/_db/testdb/_api/graph/test_graph/vertices
с телом:
{"batchSize":1,"count":false,"filter":{"properties":[{"key":"text","value":"my text value":"=="}]}}
Это крайне неэффективно, поскольку оно повторяется по каждой вершине.
Итак, возможно ли эффективно выполнить запрос в
- aql
- чертежи
- и http-интерфейс?
Большое спасибо.
ОБНОВЛЕНИЕ: я нашел простой полнотекстовый запрос через HTTP
http://{arangodb}/_db/testdb/_api/simple/fulltext
и тело:
{ "collection": "test_vertices", "attribute" : "text", "query" : "my text value" }
ОБНОВЛЕНИЕ-2
Я нашел AQL:
FOR v in FULLTEXT(test_vertices, 'text', 'my text value') RETURN v
Ответ №1:
Допустим, ваша коллекция называется «вершины», а ваш атрибут — «текст».
В AQL вы можете использовать «ПОЛНОТЕКСТОВЫЙ» (см. http://docs.arangodb.org/Aql/Operators.html ):
arangosh [_system]> db._query("return FULLTEXT(vertices, 'text', 'hallo')").toArray()
[
[
{
"_id" : "vertices/268953710",
"_rev" : "268953710",
"_key" : "268953710",
"text" : "hallo hugo"
},
{
"_id" : "vertices/269150318",
"_rev" : "269150318",
"_key" : "269150318",
"text" : "hallo emil"
},
{
"_id" : "vertices/268757102",
"_rev" : "268757102",
"_key" : "268757102",
"text" : "hallo world"
}
]
]
Для HTTP вы можете использовать HTTP-интерфейс для AQL и вышеупомянутую ПОЛНОТЕКСТОВУЮ функцию.
В качестве альтернативы вы можете использовать конечную точку «PUT /_api / simple / fulltext» и выполнить полнотекстовый поиск напрямую (см. http://docs.arangodb.org/HttpSimpleQuery/README.html ).
Комментарии:
1. Это выглядит проще, но курсор недоступен.