Символы ESC полнотекстового поиска SQL Server?

ctypes является частью стандартной библиотеки, и поэтому более стабилен и широко доступен, чем большой глоток , который всегда имел тенденцию давать мне проблемы .

С ctypes, необходимо удовлетворить любую зависимость времени компиляции от Python, и привязка будет работать над любым Python, который имеет ctypes, не только тот, против которого это было скомпилировано.

предположим у Вас есть простой класс C++ в качестве примера, с которым Вы хотите говорить в файле, названном foo.cpp:

#include 

class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};

, Так как ctypes может только говорить с функциями C, необходимо предоставить тем, которые объявляют их как экстерн "C"

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

Затем, необходимо скомпилировать это в общую библиотеку

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

, И наконец необходимо записать обертку Python (например, в fooWrapper.py)

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')

class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()

    def bar(self):
        lib.Foo_bar(self.obj)

, Как только у Вас есть это, можно назвать его как [1 114]

f = Foo()
f.bar() #and you will see "Hello" on the screen

18
задан driis 15 June 2009 в 10:50
поделиться

1 ответ

Плохие новости: нет пути. Хорошие новости: вам это не нужно (так как это все равно не поможет).

Я столкнулся с аналогичной проблемой в одном из моих проектов. Насколько я понимаю, при построении полнотекстового индекса SQL Server обрабатывает все специальные символы как разделители слов и, следовательно:

  1. Ваше слово с таким символом представляется как два (или более) слова в полнотекстовом индексе.
  2. Эти символы удалены и не отображаются в индексе.

Предположим, у нас есть следующая таблица с соответствующим полнотекстовым индексом для нее (который пропущен):

CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Рассмотрим позже, что мы добавить строки в таблицу:

INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

Попробуйте выполнить поиск:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')

и

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')

Первая группа условий будет соответствовать первой строке (а не второй), а вторая группа будет соответствовать только второй строке.

К сожалению, я не смог найдите ссылку на MSDN (или что-то в этом роде), где четко указано такое поведение. Но я нашел официальную статью , в которой рассказывается, как преобразовывать кавычки для полнотекстовых поисковых запросов, которые [неявно] согласованы с описанным выше алгоритмом.

Допустим, у нас есть следующая таблица с соответствующим полнотекстовым индексом для нее (который пропускается):

CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Позже мы добавим строки в таблицу:

INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

Попробуйте выполнить поиск:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')

и

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')

Сначала группа условий будет соответствовать первой строке (а не второй), тогда как вторая группа будет соответствовать только второй строке.

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

Предположим, у нас есть следующая таблица с соответствующим полнотекстовым индексом для нее (который пропускается):

CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Позже мы добавим строки в таблицу:

INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

Попробуйте выполнить поиск:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')

и

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')

Сначала группа условий будет соответствовать первой строке (а не второй), тогда как вторая группа будет соответствовать только второй строке.

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

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

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

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

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