PDA

View Full Version : سوال: مشکل با full text search



numberone1
جمعه 28 شهریور 1393, 18:48 عصر
سلام
من میخوام توی یک فیلد که ایندکس گذاری کردم به عنوان full text عملیات جستجو انجام بدم
ولی مشکل اینه که میخوام متن جستجو کنم نه فقط یک کلمه
از این کوئری استفاده کردم ولی برای جملخ جواب نمیده
ولی اگر فقط یک کلمه باشه جواب درست و برمیگردونه




SELECT * FROM `my_table` WHERE MATCH (`message`) AGAINST ('kalameye man ' IN BOOLEAN MODE) ORDER BY `id` DESC

plague
شنبه 29 شهریور 1393, 09:32 صبح
اگه میخای عینان جستجو کنه متنی که میخای جستجو بشه رو باید در دابل کوتیشن بزاری

'"kalameye man" '

numberone1
شنبه 29 شهریور 1393, 16:27 عصر
اگه میخای عینان جستجو کنه متنی که میخای جستجو بشه رو باید در دابل کوتیشن بزاری

'"kalameye man" '

این منظورم نبود
میخوام چند تا کلمه همزمان سرچ کنم یکیش و میتونم بزارم تو دابل کوتیشن ولی هیچ جوابی بر نمیگردونه
میخوام مثلا سرچ کنم
login "username" tarikh ip payment failled
تو همه ردیف ها username هست ولی
مثلا تو یک ردیف فقط tarikh استفاده شده
تو ردیف بعدی فقط ip استفاده شده
اینجوری سرچ میکنم نتیجه نمیده

numberone1
یک شنبه 30 شهریور 1393, 11:54 صبح
کسی نیست کمک کنه؟

mohammad reza beizavi
جمعه 04 مهر 1393, 17:57 عصر
شاید منظورتون رو درست متوجه نشده باشم اما طبق برداشتی که از سوالتون داشتم سعی می کنم کمک کنم.
دوست عزیز، توی Full Text Search وقتی یه عبارت رو جستجو می کنید تنها رکوردهایی رو به شما بر میگردونه که عینا همون عبارت رو داره. مثلا اگر نوشتید "تاکسی تلفنی" تنها رکوردهایی رو بر می گردونه که عینا این عبارت رو داره و اینجور نیست که تمام رکوردهایی که با عبارت "تاکسی" یا "تلفنی" هست رو برگردونه.
اما برای ساختم یه کوئری جستجوی مناسب و دلخواه باید اون رو بسازید مثلا شما می خواید همین عبارت "تاکسی تلفنی" رو توی جدول TellBooks پیدا کنید.


SELECT * from TellBooks WHERE Contains(*,N'تاکسی تلفنی')
UNION
SELECT * from TellBooks WHERE Contains(*,N'تاکسی OR تلفنی')

پس بهترین راه اینه که کلمات داخل عبارتتون رو با استفاده از یه token مثل فاصله از هم جداشون کنید و کوئریتون رو خودتون بسازید.

alireza.stack
جمعه 04 مهر 1393, 19:54 عصر
دوست عزیز، توی Full Text Search وقتی یه عبارت رو جستجو می کنید تنها رکوردهایی رو به شما بر میگردونه که عینا همون عبارت رو داره. مثلا اگر نوشتید "تاکسی تلفنی" تنها رکوردهایی رو بر می گردونه که عینا این عبارت رو داره و اینجور نیست که تمام رکوردهایی که با عبارت "تاکسی" یا "تلفنی" هست رو برگردونه.


سلام
فلسفه روش Fulltext search کلا زیر سوال رفت! در حالت Fulltext اگر یک کلمه باشد می تواند آن رکورد را برگرداند و اینطور نیست که تمامی کلمات داخل رکورد موجود باشد.

و اما پاسخ:

روش شما درست است در جهت کويری گرفتن ایراد ندارد و صحیح است. لطفا بررسی کنید و مطمئن شوید که اون رکورد رو fulltext search کرده اید.

برای مثال:



CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title)
) ENGINE=InnoDB;


در حین ایجاد جدول من فیلد را fulltext کرده ام. اگر اینکار را انجام نداده باشید نمی توانید روی فیلد جستجوی fulltext بزنید.

شاد باشید. ;-)

mohammad reza beizavi
جمعه 04 مهر 1393, 21:14 عصر
سلام
فلسفه روش Fulltext search کلا زیر سوال رفت! در حالت Fulltext اگر یک کلمه باشد می تواند آن رکورد را برگرداند و اینطور نیست که تمامی کلمات داخل رکورد موجود باشد.


دوستان ببخشید، من با Full Text Search توی SQL Server اشتباه گرفتم و جواب رو بر اساس اون دادم.