QueryContainerDescriptor Elasticsearch - Получить весь документ с описанием, не равным String.Empty - PullRequest
0 голосов
/ 21 июня 2020

Я использую QueryContainerDescriptor для заполнения фильтра. Я хочу получить весь документ, описание которого не равно String.Empty.

Я пытался сделать:

        public static QueryContainerDescriptor<T> FilterSummaryEmpty<T>(this QueryContainerDescriptor<T> qd)
where T : ElasticEntityDoc
        {           
            qd.Bool(b=> 
                        b.MustNot(mn =>                        
                            mn.Term(f => f.Description, string.Empty)
                        ));

            return qd;
        }

, но он не работает.

Также Я пытался использовать для этого регулярное выражение, но безуспешно. что я делаю не так?

1 Ответ

1 голос
/ 21 июня 2020

Если вы используете standard analyser, проверка пустоты не будет работать, потому что она не будет анализироваться, так как она пуста. Таким образом, в индексе не будет ничего, кроме empty.

Чтобы проверить это, вам нужно сделать копию поля в другом поле как not_analyzed в вашем сопоставлении. Ссылка Таким образом, вы можете проверить пустоту в скопированном поле и другие запросы в поле description.

Есть еще один способ проверить это. Вы можете использовать exists

Хотя поле считается несуществующим, если значение JSON равно null или [], эти значения будут указывать на то, что поле действительно существует:

Пустые строки, такие как "" или "-" Массивы, содержащие null и другое значение, например [null, "foo"] Пользовательское нулевое значение, определенное в сопоставлении полей

...