Пошук в Ghini

Пошук дозволяє представляти, перегляд і створювати звіти з ваших даних. Ви можете виконувати пошук ввівши запит в основному компоненті пошуку або використати Query Builder для створення запитів. Результати пошуку Ghini виводяться в головному вікні.

Стратегії пошуку

Ghini пропонує чотири різні стратегії пошуку:

  • за значенням - у всіх доменах;
  • за виразом - в декількох неявних полях в одній явній області;
  • за запитом - в одному домені;
  • за біномічним ім’ям - пошук лише в домені Вид.

Усі стратегії пошуку - за винятком пошуку біноміальних назв - нечутливі до регістру.

Пошук за значенням

Пошук за значенням - це найпростіший спосіб пошуку. Ви вводите одне або декілька рядків і дізнаєтеся, які збіги. Результат включає об’єкти будь-якого типу (домену), де один або декілька його полів містять одне або кілька пошукових рядків.

Ви не вкажете пошуковий домен, всі вони включені, а також ви не вкажете, які поля потрібно підібрати, це неявно в пошуковому домені.

Наступна таблиця допоможе вам зрозуміти результати та допоможе вам у формулюванні ваших пошуків.

огляд пошукового домену
ім’я та короткі терміни поле тип результату
family, fam epithet (family) Family
genus, gen epithet (genus) Genus
species, sp epithet (sp) × Species
vernacular, common, vern ім’я Species
geography, geo ім’я Geography
accession, acc code Accession
planting, plant code × Plant
location, loc code, name Location
contact, person, org, source ім’я Contact
collection, col, coll locale Collection
tag, tags ім’я Tag

Приклади пошуку за значенням будуть: Maxillaria, Acanth, 2008.1234, 2003.2.1,indica.

Рядок пошуку розділений пробілами. Наприклад, якщо ввести в рядок пошуку Block 10 то Ghini буде шукати рядки Block і 10 та поверне всі результати, які відповідають цим рядкам. Якщо ви хочете знайти безроздільно Block 10 у рядку, то ви повинні ввести в рядок пошуку, як цитату "Block 10".

× складні первинні ключі

Епітет вид означає мало, без відповідного роду, також код рослин унікальний тільки в рамках приєднання, до якого вони належать. У теорії термінологія бази даних, епітету і коду недостатньо для формування первинного ключа для відповідних видів та посадок. Ці домени потребують первинного ключа composite.

Пошук по значеннях дозволяє шукати посадки за їх повним кодом посадки, який включає код приєднання. Взагалі, код приєднання та код посадки забезпечують складний первинний ключ для посадок. Для виду ми представили біноміальний пошук, описаний нижче.

Пошук за виразом

Пошук за допомогою виразу дає вам трохи більше контролю над тим, що ви шукаєте. Ви обмежуєте пошук до певного домену, програмне забезпечення визначає, які поля потрібно шукати в зазначеному вами домені.

Вираз будується як <domain> <operator> <value>. Наприклад, пошук: gen=Maxillaria поверне усі роди, які відповідають імені Maxillaria. У цьому випадку домен gen, оператор = і значення Maxillaria.

У наведеній вище таблиці огляду пошукових доменів вказані імена пошукових доменів, а також для кожного пошукового домену, які поля шукаються.

Рядок пошуку loc like block% повертає всі місця, для яких ім’я або код починається з «block». У цьому випадку домен є loc (скорочення для location), оператор є like (це походить з SQL і дозволяє «fuzzy» пошук) значення є block%, поля, що неявно співпадають ім'я і код. Знак відсотка використовується як динамічна карта, тому якщо ви шукаєте block%, то він шукає всі значення, що починаються з block. Якщо ви шукаєте %10, він шукає всі значення, які закінчуються 10. Рядок %ck%10 буде шукати всі значення, яке містить ck і закінчується на 10.

Скільки часу потрібно на запит

Ви даєте запит, це вимагає часу для обчислення, результат містить необґрунтовано багато записів. Це трапляється, коли ви маєте намір використати стратегію, але ваші рядки не утворюють дійсного виразу. У цьому випадку Ghini повертається до пошуку за значенням. Наприклад, рядок пошуку gen lik maxillaria буде шукати рядки gen, lik і maxillaria, повертаючи всі, що відповідають хоча б одному з трьох критеріїв.

Пошук по запиту

Запити дозволяють максимально контролювати пошук. За допомогою запитів ви можете здійснювати пошук по відношенню до певних стовпчиків, комбінуючи критерії пошуку за допомогою логічних операторів, таких як and, or, not (і їх скорочення &&, ||, !) додайте їх у дужки, та багато іншого.

Будь ласка, зв’яжіться з авторами, якщо ви хочете отримати додаткову інформацію, або якщо ви добровільно документуєте це докладніше. Тим часом ви можете почати ознайомитися з основною структурою бази даних Ghini.

_images/ghini-10.svg

основна структура бази даних Ghini

Кілька прикладів:

  • насадження сімейства Fabaceae в місці розташування Блок 10:

    plant WHERE accession.species.genus.family.epithet=Fabaceae AND location.description="Block 10"
    
  • місця, де немає рослин:

    location WHERE plants = Empty
    
  • приєднання, пов’язані з видом відомих біномічних назв (наприклад, Mangifera indica):

    accession WHERE species.genus.epithet=Mangifera AND species.epithet=indica
    
  • приєднання ми поширювали в 2016 році:

    accession WHERE plants.propagations._created BETWEEN |datetime|2016,1,1| AND |datetime|2017,1,1|
    
  • приєднання, які ми змінили за останні три дні:

    accession WHERE _last_updated>|datetime|-3|
    

Пошук за запитами вимагає певних знань про маленький синтаксис та ідеї про велику структуру таблиці Ghini. Обидва ви придбаєте з практикою і за допомогою Query Builder.

Query Builder

Query Builder дозволяє будувати складні пошукові запити через вказування і натискання в інтерфейсі. Для того, щоб відкрити Query Builder натисніть querybuilder іконку зліва від входу пошуку або виберіть Tools‣Query Builder в меню.

З’явиться вікно, яке веде вас до всіх кроків, необхідних для побудови правильного запиту, який розуміється в стратегії пошуку запиту Ghini.

_images/qb-choose_domain.png
_images/qb-choose_property.png

Насамперед, ви вказуєте пошуковий домен, це дозволить Query Builder завершити свій графічний інтерфейс, після чого ви додасте стільки логічних статей, скільки потрібно, підключаючи їх and або or бінарним оператором.

Кожен розділ складається з трьох частин: властивості, які можна отримати з початкового домену пошуку, оператор зіставлення, який ви вибираєте з розкривного списку, значення, яке ви можете ввести або вибрати зі списку дійсних значень для поля.

Додайте якомога більше властивостей пошукових систем, натиснувши знак плюс. Виберіть та/або біля назви властивості, щоб вибрати, які об’єкти будуть об’єднані в пошуковому запиті.

Коли ви закінчите створення свого запиту натисніть кнопку OK, щоб виконати пошук.

На цьому етапі конструктор запитів записує запит у записі пошуку та виконує його. Тепер ви можете редагувати рядок так, ніби ви набрали його самостійно. Зверніть увагу, як значення інтер’єру лівої сторони інтерпретуються забудовником запиту та додаються в окремі лапки, якщо вони визнані як рядки, залишатись окремо, якщо вони виглядають як цифри або два зарезервовані слова None та Empty. Ви можете відредагувати запит і вставляти лапки, якщо вони вам потрібні, наприклад, якщо вам потрібно буквально шукати рядок Empty.

None - це значення порожнього поля. Це не те ж саме, що рядок нульової довжини '', ані числове 0, ані логічне False, ані встановлення Empty, це означає, що поле не має значення Все.

Empty є порожнім набором. Будучи набором, він може бути узгоджений з наборами (наприклад: рослини приєднання або приєднання одного виду), не проти елементів (наприклад, кількість рослини або опис місця розташування). Тим не менш, Query Builder не дозволяє вибирати зупинку значень лівої сторони при встановленні, він сподівається, що ви виберете поле. Виберіть будь-яке поле: на момент створення запиту, коли Builder Query відповідає умовам з правою частиною значення буквеного рядка Empty, він виведе поле назви і дозволить вам порівняти набір зліва з Empty справа.

У нас немає друкарських букв False і True. Це типи значення, і Query Builder не вміє їх випускати. Замість False введіть 0, а замість True 1 тип.

Граматика запиту

Для тих, хто не боїться дещо формальної точності, наступний код BNF дає точне уявлення про граматику, яку реалізує Стратегія пошуку запитів. Деякі граматичні категорії визначаються неформально; будь-які зниклі з них залишаються у вашій родючій уяві; літери беруться в одинарні лапки; граматика в основному нечутлива, якщо не вказано інше:

query ::= domain 'WHERE' expression

domain ::= #( one of our search domains )
expression ::= signed_clause
             | signed_clause 'AND' expression
             | signed_clause 'OR' expression
             ;
signed_clause ::= clause
                | 'NOT' clause  #( not available in Query Builder)
                ;
clause ::= field_name binop value  #( available in Query Builder)
         | field_name set_binop value_list
         | aggregated binop value
         | field_name 'BETWEEN' value 'AND' value
         | '(' expression ')'
         ;
field_name ::= #( path to reach a database field or connected table )
aggregated ::= aggregating_func '(' field_name ')'
aggregating_func ::= 'SUM'
                   | 'MIN'
                   | 'MAX'
                   | 'COUNT'
                   ;
value ::= typed_value
        | numeric_value
        | none_token
        | empty_token
        | string_value
        ;
typed_value ::= '|' type_name '|' value_list '|'
numeric_value ::== #( just a number )
none_token ::= 'None'    #( case sensitive )
empty_token ::= 'Empty'  #( case sensitive )
string_value = quoted_string | unquoted_string

type_name ::= 'datetime' | 'bool' ;  #( only ones for the time being )
quoted_string ::= '"' unquoted_string '"'
unquoted_string ::=  #( alphanumeric and more )

value_list ::= value ',' value_list
             | value
             ;
binop ::= '='
        | '=='
        | '!='
        | '<>'
        | '<'
        | '<='
        | '>'
        | '>='
        | 'LIKE'
        | 'CONTAINS'
        ;
set_binop ::= 'IN'

Будь ласка, пам’ятайте, що мова запиту Ghini є набагато складнішою, ніж те, що може створити Query Builder: запити, які ви можете побудувати за допомогою Query Builder, є правильною підмножиною запитів, визнаних програмним забезпеченням:

query ::= domain 'WHERE' expression

domain ::= #( one of our search domains )
expression ::= clause
             | clause 'AND' expression
             | clause 'OR' expression
             ;
clause ::= field_name binop value
         ;
field_name ::= #( path to reach a database field or connected table )
value ::= numeric_value
        | string_value
        ;
numeric_value ::== #( just a number )
string_value = quoted_string | unquoted_string ;

quoted_string ::= '"' unquoted_string '"'
unquoted_string ::=  #( alphanumeric and more )

binop ::= '='
        | '=='
        | '!='
        | '<>'
        | '<'
        | '<='
        | '>'
        | '>='
        | 'LIKE'
        | 'CONTAINS'
        ;