Что такое «поиск на основе предикатов»? - PullRequest
4 голосов
/ 21 июня 2010

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

Разъяснение: спасибо, ребята, за первоначальный взгляд на это ... но оказалось, что речь шла о "поиске" в базах данных / интернете и т. Д. ...

Ответы [ 4 ]

9 голосов
/ 21 июня 2010

Как правило, предикат - это функция, которая принимает один или несколько аргументов и возвращает логическое значение, указывающее, является ли какое-либо утверждение об аргументах истинным или ложным.

Примерыпредикаты на естественном языке могут быть «синего цвета», «длиннее двух метров», «принадлежат MC Hammer», «находятся под землей».

При выполнении поиска в некоторой системе, например в файловой системетаблица базы данных, график - возможно, сама система обеспечивает определенные встроенные поиски (файловая система может иметь встроенный поиск по имени файла; граф может иметь встроенный поиск по расстоянию от данного узла);или, для большей гибкости, может быть способ поиска с помощью пользовательской функции предиката.

В зависимости от деталей, эту пользовательскую функцию предиката можно передать в виде дерева выражений или указателя на некоторый фактический исполняемый код.или выражение запроса для анализа.Все, что требуется, - это то, что система имеет некоторый способ вызывать предикат для каждого элемента-кандидата;и что предикат возвращает истину или ложь для каждого элемента-кандидата.

Результатами поиска будут именно те элементы, для которых пользовательский предикат возвращает истину.

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

В широко распространенных базах данных с осколками повсюду традиционные шаблоны поиска с использованием индексов и т. Д. Рушатся. Для этих баз данных часто выполняется операция уменьшения карты. Отображение косвенным образом определяется с помощью шардинга и передаваемого вами предиката, который сопоставляет записи, соответствующие предикату, с тем, что необходимо в результате. На этапе сокращения выполняется необходимая агрегация и др.

Может быть, это согласуется с контекстом обсуждения журнального столика?

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

Я не знаю, имеет ли термин в целом какое-либо конкретное значение, но в более широком смысле «предикат» - это функция, которая принимает в качестве входных данных сущность (т.е. некоторый объект-кандидат) и возвращает логическое значение указывает, было ли выполнено условие предиката.

Исходя из этого, можно сделать вывод, что поиск на основе предикатов - это поиск, основанный на предикатах - то, что можно назвать фильтром. Например, вы можете построить поиск, сложив вместе два простых предиката, скажем IsUppercaseString и StringStartsWith("S")*, для поиска строк в верхнем регистре, начинающихся с S.

  • Обратите внимание, что это псевдокод, а не какой-либо конкретный синтаксис, так как я держу этот язык-независимый
1 голос
/ 21 июня 2010

Если они говорили о .NET, то имели в виду тип Predicate , требуемый многими методами расширения коллекций.

Это делегат, представляющий метод, который определяет набор критериев и определяет, соответствует ли указанный объект этим критериям.

Я не уверен, что другие платформы используют эту терминологию.

//selects items in list where the `ID` property matches `id`
List.Select(x => x.ID == id); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...