Полнотекстовый каталог / поиск по индексу для %book %

Я думаю, что вы, вероятно, имели флаг double_quotes в codes, когда constant_value был скомпилирован. Значение этого флага не повлияет на предложения, уже сохраненные в базе данных.

constant_value1 --> "ID".
:-set_prolog_flag(double_quotes, chars).
constant_value2 --> "ID".

?- listing(constant_value1).
constant_value1([73, 68|A], A).
?- listing(constant_value2).
constant_value2(['I', 'D'|A], A).

Редактировать Guy Coder

Поскольку я использую Q & A в SO как личную записную книжку со своими Q & A, я склонен смотреть на принятый ответ для деталей ; Я добавляю их сюда для всеобщего блага.

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

было написано

:- set_prolog_flag(double_quotes,chars). 

]

constant_value --> "ID".

затем в REPL

?- consult('C:/dcg_examples.pl').  

?- listing(constant_value).
constant_value(['I', 'D'|A], A).

true.  

и использовать этот

?- phrase(constant_value,"ID").
true.

В последнем исходном коде я изменил значение для double_quotes

[ 115]

замечают, что изменение с chars на codes

Перезапуск REPL и выполнение тех же действий

?- consult('C:/dcg_examples.pl').  

?- listing(constant_value).
constant_value([73, 68|A], A).

true.

?- phrase(constant_value,"ID").
true.

дали другой результат для листинга / 1.

Однако в REPL использование

set_prolog_flag(double_quotes,). 

не оказало влияния на результат листинга / 1.

< ЗНАЧЕНИЕ > может быть одним из string, chars, codes, traditional или atom.

Ключевым моментом, который следует здесь отметить, является то, что в листинге / 1 используется проверенный / скомпилированный / сохраненный код. Таким образом, значение double_quotes во время консультации / компиляции / хранения - это то, что использует листинг / 1. Любые изменения в double_quotes после этого в REPL не изменят полученный / скомпилированный / сохраненный код и, следовательно, результат листинга / 1.

Чтобы осуществить изменение, вы должны добавить

:- set_prolog_flag(double_quotes,). 

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

Значение «консультируется / компилируется / сохраняется» не означает, что это три отдельных действия, выполняемых в последовательности, здесь они определяют, когда исходный код помещается в базу данных для использования в листинге / 1.

16
задан p.campbell 27 July 2012 в 17:48
поделиться

3 ответа

к сожалению, СОДЕРЖИТ только подстановочные знаки префикса поддержек:

CONTAINS(*, '"book*"')
15
ответ дан 30 November 2019 в 21:20
поделиться

Если Вы хотите сделать некоторый серьезный полнотекстовый поиск затем, я был бы (и иметь), используют Lucene. Сеть. MS Полнотекстовый поиск SQL никогда, кажется, не работает что хорошо на что-либо кроме основ.

3
ответ дан 30 November 2019 в 21:20
поделиться

Полнотекстовый поиск SQL Server основан на тексте маркирования в слова. Нет никакой меньшей единицы как слово, таким образом, пустяками, которые можно искать, являются слова.

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

Сделать то, что Вы хотите запрос с a LIKE '%book%' пункт, вероятно, был бы так же, как быстро (или медленный).

7
ответ дан 30 November 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: