Пошук в 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
, повертаючи всі, що відповідають хоча б одному з трьох критеріїв.
Біноміальний пошук¶
Ви також можете виконати пошук у базі даних, якщо ви знаєте цей вид, просто розмістивши в пошуковій системі декілька початкових букв епітетів роду та виду, правильно надруковані, тобто: Епітет роду з однією заголовною великою буквою, **Епітет видів ** всі літери.
Таким чином ви можете виконати пошук So ha
.
Це були б ініціали для Solanum hayesii, або Solanum havanense.
Біноміальний пошук приходить до компенсації обмеженої корисності вищезгаданого пошуку за виразом при спробі шукати вид.
Це правильна капіталізація **Xxxx xxxx **, яка інформує програмне забезпечення про свій намір виконувати пошук у біноміалі. Друга помилка програмного забезпечення - пошук за значенням, що, можливо, призведе до набагато більшої кількості значень, ніж ви очікували.
Аналогічний запит so ha
поверне в новій установці понад 3000 об’єктів, починаючи з сім’ї «Acalyp(ha)ceae», закінчуючи географією «Western (So)uth America».
Пошук по запиту¶
Запити дозволяють максимально контролювати пошук. За допомогою запитів ви можете здійснювати пошук по відношенню до певних стовпчиків, комбінуючи критерії пошуку за допомогою логічних операторів, таких як and
, or
, not
(і їх скорочення &&
, ||
, !
) додайте їх у дужки, та багато іншого.
Будь ласка, зв’яжіться з авторами, якщо ви хочете отримати додаткову інформацію, або якщо ви добровільно документуєте це докладніше. Тим часом ви можете почати ознайомитися з основною структурою бази даних 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 натисніть іконку зліва від входу пошуку або виберіть в меню.
З’явиться вікно, яке веде вас до всіх кроків, необхідних для побудови правильного запиту, який розуміється в стратегії пошуку запиту Ghini.
Насамперед, ви вказуєте пошуковий домен, це дозволить 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'
;