Я хочу определить поисковый API в моем приложении, который позволяет клиенту предоставлять поисковые запросы в качестве выражения.
Поисковый запрос может включать конструкции, такие как поля, значения, условные операторы, логические операторы. Мое приложение считывало бы эти конструкции и преобразовывало бы в хранилище данных, задавая c запросов.
Прямо сейчас я определил свои поисковые конструкции следующим образом:
SearchExpression: {
Criteria c;
}
Criteria: {
SimpleCriteria sc; // is-a Criteria
ComplexCriteria cc; // is-a Criteria
}
SimpleCriteria: {
Field f;
ConditionalOperator cop;
Value v;
double weightage; // Search API will have it's own way of computing score of matching result,
// which may not suite to some of the clients. In such scenario, clients
// can specify weightage for each criteria.
}
ComplexCriteria: {
Criteria c1;
LogicalOperator lop;
Criteria c2;
}
ConditionalOperator: {
EQL;
NOT_EQL;
IN;
NOT_IN;
MATCH;
CONTAIN;
}
Field: {
TYPE_1;
TYPE_2;
}
Value: {
String stringValue;
Double doubleValue;
}
Мое первоначальное исследование (google-search ) говорит мне, что мы можем определить грамматику запроса и проанализировать ее, используя инструменты распознавания языка, такие как ANTLR4. Но для этого требуется написать собственный слой транслятора для преобразования дерева разбора в доменные / бизнес-объекты.
Я хотел бы знать, можем ли мы использовать любую стандартную библиотеку выражений для определения вышеуказанных конструкций в интерфейсе API.
Пожалуйста, дайте мне знать, если есть какие-либо стандартные рамки для определения базовых c поисковых конструкций в интерфейсе.