Как написать регулярное выражение «Заканчивается на» в Azure Search - PullRequest
0 голосов
/ 28 ноября 2018

В Поиске Azure в поле со значениями, такими как «12-10-3» или «30-843-44», я настроил собственный токенизатор, чтобы заменить тире пустой строкой.

Я сейчасЯ хочу выполнить поиск "заканчивается с помощью регулярных выражений", но не могу заставить его делать то, что я хочу.

Например, чтобы найти коды, заканчивающиеся на 3, я пытался:

searchMode=any&queryType=full&search=code:/(.*)3/

Этовозвращает, скажем, «12-10-3», но также такие, как «30-843-44».

Затем я попытался:

searchMode=any&queryType=full&search=code:/(.*)3[^<0-9>]*/

Но, похоже, это дает тот же результат,Я пытался пройти через синтаксис регулярных выражений, на который есть ссылки в документах поиска Azure здесь .

Когда я проверяю моего токенизатора на "123-456-78",Кажется, он работает, поэтому я не понимаю, почему поиск регулярных выражений работает некорректно.

"tokens": [
        {
            "token": "12345678",
            "startOffset": 0,
            "endOffset": 10,
            "position": 0
        }
]

Есть идеи?

Обновление:

Токенизаторприменяется в C # следующим образом:

var myIndexDefinition = new Index()
{
    Name = "MyIndex",
    Analyzers = new[] 
    {
        new CustomAnalyzer
        {
            Name = "code_with_dash_analyzer",
            Tokenizer = TokenizerName.Keyword,
            CharFilters = new CharFilterName [] { "dash_to_empty_mapper" }
        }
    },
    CharFilters = new List<CharFilter>
    {
        new MappingCharFilter("dash_to_empty_mapper", new[] { "- => " })
    },
    Fields = new[]
    {
     // Field with the dash in the values
     new Field("codes", DataType.String) { IsRetrievable = true, IsSearchable = true, IsSortable = true, IsFilterable = true, IsFacetable = true },
     //.... other field definitions....
    }
}

1 Ответ

0 голосов
/ 29 ноября 2018

Согласно вашему описанию, только по моему опыту, я думаю, что ваша проблема может быть вызвана вашим пользовательским токенизатором, который, как реализовать, я не знаю.

Однако, без использования пользовательского токенизатора,Вы можете попробовать регулярное выражение lucene, которое должно работать:

/([0-9]+\-?)+[0-9]*3/

Надеюсь, это поможет.

...