SQL функцията CONTAINS() не връща очакваните резултати?

Имам таблица „Asset“ с колона „AssetDescription“. Всеки ред от него има група от думи/изречения, разделени със запетая.

ред1: - цветя, пълноцветни, женски, Trend

ред2:- миришещи на бебе цветя, сърце

Сега, ако поставя заявка за търсене като: -

select * from Asset where contains(AssetDescription,'flower')

Не връща нищо.

Имам още една таблица „SearchData“ с колона „SearchCol“, която има подобни редове, както е споменато по-горе в таблица „Asset“.

Сега, ако поставите заявка за търсене като: -

select * from SearchData where contains(SearchCol,'flower')

Връща и двата реда.

ВЪПРОС:-

  1. Защо първата заявка не връща никакъв резултат, но втората го прави правилно.
  2. Ако „Търсене в пълен текст“ има нещо общо с първия въпрос, какво да правим по отношение на това. Тъй като използвам SQL сървър 2000.

Изчистване на съмнение за коментар по моя въпрос:-

  1. Таблица „SearchData“ има повече от 100 000 реда, както и таблицата „Asset“.

  2. Тези две таблици НЕ са идентични. Но съответните им колони имат редове, които съдържат някаква група думи, разделени със запетаи. (Така че цветя, цветя и т.н. и т.н. са в изобилие и в двете колони.)

Екранна снимка на индексите на двете таблици (Asset и SearchData):- въведете описание на изображението тук


person Kings    schedule 21.03.2012    source източник
comment
Какви са типовете колони на AssertDescription и SearchCol?   -  person barsju    schedule 21.03.2012
comment
и ако използвате съдържа (..., 'цветя') или съдържа (..., 'цвете*') какви са резултатите?   -  person Phil    schedule 21.03.2012
comment
и ако използвате съдържа (..., 'цветя') или съдържа (..., 'цвете*') какви са резултатите? --› резултатите са някои, които не са НИЩО (нула редове)   -  person Kings    schedule 21.03.2012
comment
можете ли да опитате съдържа (... 'цвете*') с единични и двойни кавички?   -  person Phil    schedule 21.03.2012


Отговори (3)


вероятно има нещо общо с вашата конфигурация на индекс на пълен текст. Можете ли да публикувате малко информация във вашия индекс и каталог?

person Diego    schedule 21.03.2012
comment
здравейте, не виждам нищо свързано с пълния текст на екранната снимка. Не можете да използвате предикат CONTAINS или FREETEXT в таблица, която не е индексирана в пълен текст. - person Diego; 21.03.2012
comment
Разбирам смисъла ви. Но заявката за търсене на таблица „SearchData“ успешно дава резултати. И така, как е възможно това. Има ли начин да проверя в коя таблица/колона е активирано 'fulltextsearch'. - person Kings; 21.03.2012
comment
добре, предположих, че има пълен текстов индекс на тази таблица, в противен случай наистина щях да се изненадам. Не знам за 2000, но за 2005 можете да проверите в съхранението -› каталози с пълен текст и след това всеки каталог ще ви покаже таблиците, които го използват - person Diego; 21.03.2012
comment
DIEGO - моля, проверете актуализираните екранни снимки. И ми кажи какво не е наред. - person Kings; 21.03.2012
comment
вашето проследяване на промените е деактивирано за активи. Това означава, че индексът е създаден, но не се актуализира, както е таблицата. Трябва да попълните отново своя индекс. Разгледайте това: technet.microsoft.com/en-us/library/ ms142575.aspx - person Diego; 21.03.2012
comment
разбрах. активирах тези два деактивирани атрибута. И най-накрая ми даде очакваните резултати. Но Диего, моля да ме уведомите дали разрешаването им би причинило някакъв неблагоприятен ефект. - person Kings; 21.03.2012
comment
единствените ефекти, които бихте имали, са свързани с населението, което е процесът на актуализиране на вашия каталог въз основа на вашата таблица. Радвам се, че помогнах, моля, не забравяйте да маркирате като отговор. - person Diego; 21.03.2012

Ако прочетете статията за СЪДЪРЖА, ще видите, че когато търсите

  • съдържа (Описание на актива, 'цвете')

„цвете“ се третира като прост термин, който

съвпада с точна дума или фраза

Въпреки това за

  • съдържа (AssetDescription, 'цвете*')

„цвете“ се третира като префиксен термин, който

указва съвпадение на думи или фрази, започващи с посочения текст

и ще съответства на „цветя“ във вашите данни.

И така, сигурни ли сте, че данните във вашите две таблици са едни и същи, или „Актив“ съдържа „цветя“, а „Дани за търсене“ съдържа „цвете“?

person Phil    schedule 21.03.2012
comment
Ако разбирам правилно OP, той казва, че търсенето на две еднакви таблици с две еднакви заявки дава различни резултати. Това са две различни заявки, така че се съмнявам, че OP търси. - person Lieven Keersmaekers; 21.03.2012
comment
Да, но ако двете таблици съдържат едни и същи данни и имат еднакви индекси на пълен текст, тогава една и съща заявка трябва да даде едни и същи резултати. Така че или данните са различни, таблиците по някакъв начин са индексирани по различен начин или заявката е различна. - person Phil; 21.03.2012
comment
разбира се, но OP показа заявките, така че могат да бъдат издраскани. Трябва да вярваме на думите му, че масите са еднакви (предпочитам да го видя някак си доказано), така че всичко, което е останало, е по някакъв начин различно индексирано. - person Lieven Keersmaekers; 21.03.2012
comment
OP трябва да ни показва дефинициите и индексите на таблиците. Още по-добре, ако може да предостави примерен скрипт, който демонстрира проблема. - person Lieven Keersmaekers; 21.03.2012
comment
@ ФИЛ и ЛИВЪН :- моля, вижте моето обяснение относно съмненията, които изпитвате по въпроса ми. Надявам се това да помогне - person Kings; 21.03.2012
comment
Ако е възможно тук в този уебсайт, бих искал да дам екранни снимки на проблема. Наистина ме притеснява. - person Kings; 21.03.2012
comment
@Lieven - уведомете ме, ако искате подробности относно индексирането - person Kings; 21.03.2012
comment
@Kings - Възможно е да прикачите изображение към вашия въпрос. Просто го запазете някъде на диск и използвайте бутона за качване на изображение, когато редактирате въпроса си. - person Lieven Keersmaekers; 21.03.2012
comment
@Моля, проверете екранната снимка..или се изисква нещо друго? - person Kings; 21.03.2012

ПОЛУЧИХ РЕШЕНИЕТО.

БЛАГОДАРЯ НА ВСИЧКИ и особено на ДИЕГО за подкрепата.

За да позволите на ТЪРСЕНЕТО В ПЪЛЕН ТЕКСТ (FTS) да работи правилно:-

  1. Активирайте FTS за необходимата таблица.
  2. Активирайте FTS за необходимата колона под тази таблица.
  3. Отворете свойствата за същата таблица и проверете дали атрибутите „Проследяване на промените в пълен текст“ и „Индекс за актуализиране на пълен текст“ са активирани. Ако не, активирайте ги.

СВЪРШЕН. :)

person Kings    schedule 21.03.2012
comment
точно това казах в коментарите си. Трябва да го маркирате като отговор. - person Diego; 21.03.2012