Один запрос требует учета регистра, а второй - без учета регистра. Поэтому я предлагаю вам использовать подполе для поля хеша. Ваше основное поле будет проанализировано с помощью строчного анализатора, а одно будет хранить необработанные данные, то есть точный хеш. Таким образом, ваш индекс будет выглядеть следующим образом:
PUT /test
{
"settings": {
"number_of_shards": "1",
"number_of_replicas": "0",
"analysis": {
"analyzer": {
"custom_lowercase": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "keyword"
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"hash": {
"type": "text",
"analyzer": "custom_lowercase",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
}
Запрос для проверки существования хеша «ErTg1Qh» (с учетом регистра)
POST /test/_doc/_search
{
"query": {
"match": {
"hash.keyword": "ErTg1Qh"
}
}
}
Запрос для поиска хешей, которые содержит подстрока s в них
POST /test/_doc/_search
{
"query": {
"query_string": {
"query": "*tg*"
}
}
}
Статья Wikipedia точна. Если у Вас есть доступ, определенно прочитайте исходную статью Wirth о EBNF.
Другая вещь знать состоит в том, что EBNF был разработан, чтобы помочь написать от руки синтаксические анализаторы с рекурсивным спуском для языков, на которых каждая синтаксическая конструкция имеет ключевые слова идентификации вначале. Фигурные скобки переводят в while
циклы; квадратные скобки (дополнительный материал) переводят в if
, и альтернативы переводят в if-then-else
или case
операторы. Если у Вас есть роскошь разработки Вашего языка таким образом, можно вывести синтаксический анализатор из строя быстро и дать хорошие сообщения об ошибках.
Единственное место это становится немного утомительным, - когда у Вас есть язык, на котором существуют инфиксные операторы со многими разными уровнями приоритета. Для этого Вы хотите статью Dave Hanson Компактный синтаксический анализ методом рекурсивного спуска Выражений. Возможно, технический ряд отчета Принстона имеет бесплатную версию, и можно всегда смотреть на код во фронтэнде Hanson C.
Сам BNF прост, но необходимо привыкнуть к способу, которым думают разработчики компилятора. Они не, обязательно легкое чтение, но следующее является примечаниями лекции из Беркли UC и Стэнфорда.
Ну, я думаю, что Википедия является самым простым путем по двум причинам:
Также я предложил бы читать стандартного BNF только, чтобы познакомиться с идеей позади него.
По крайней мере, я всегда запускаю с Википедии также, и она почти всегда помогает.
Здесь - парсер ebnf в php.
Также может помочь немного узнать о том, как реализованы механизмы регулярных выражений. Попробуйте: re2 .