हमारे पास एक ऐसा एप्लिकेशन है जो SQL Server 2008 डेटाबेस और पूर्ण-पाठ खोज का उपयोग कर रहा है।एक हाइफ़न युक्त वाक्यांश के लिए SQL सर्वर पूर्ण-पाठ खोज अपेक्षित परिणाम नहीं लौटाती
सबसे पहले, एक वाक्यांश एक हाइफन शब्द वाले, इस तरह::
contains(column_name, '"one two-three-four five"')
और दूसरा, एक समान वाक्यांश, जहां हाइफ़न रिक्त स्थान की जगह मुझे समझ में क्यों निम्नलिखित खोजें अलग ढंग से व्यवहार कोशिश कर रहा हूँ :
contains(column_name, '"one two three four five"')
पूर्ण-पाठ सूचकांक अंग्रेजी का उपयोग करता है (1033) स्थान, और डिफ़ॉल्ट प्रणाली stoplist।
हाइफेनेटेड शब्दों वाले अन्य पूर्ण-पाठ खोजों के मेरे अवलोकनों से, पहले व्यक्ति को one two three four five
या one twothreefour five
पर मिलानों की अनुमति देनी चाहिए। इसके बजाए, यह केवल one twothreefour five
से मेल खाता है (और one two-three-four five
नहीं)।
टेस्ट केस
सेटअप:
create table ftTest
(
Id int identity(1,1) not null,
Value nvarchar(100) not null,
constraint PK_ftTest primary key (Id)
);
insert ftTest (Value) values ('one two-three-four five');
insert ftTest (Value) values ('one twothreefour five');
create fulltext catalog ftTest_catalog;
create fulltext index on ftTest (Value language 1033)
key index PK_ftTest on ftTest_catalog;
GO
क्वेरी:
--returns one match
select * from ftTest where contains(Value, '"one two-three-four five"')
--returns two matches
select * from ftTest where contains(Value, '"one two three four five"')
select * from ftTest where contains(Value, 'one and "two-three-four five"')
select * from ftTest where contains(Value, '"one two-three-four" and five')
GO
सफाई:
drop fulltext index on ftTest
drop fulltext catalog ftTest_catalog;
drop table ftTest;
प्रश्न के बारे में * क्यों * एसक्यूएल सर्वर मिलान के लिए अलग-अलग व्यवहार प्रदर्शित अधिक है:
कृपया, क्यों के लिए लिंक का पालन करें।इसके चारों ओर काम करना निश्चित रूप से करने योग्य है, लेकिन यह मुझे समझ में नहीं आता है कि "दो-तीन-चार पांच" दोनों पंक्तियों को वापस कर देंगे, हालांकि "एक दो-तीन-चार पांच" नहीं होगा। "एक दो-तीन-चार" के लिए डितो। क्या यह वास्तव में अपेक्षित व्यवहार है? और यदि हां, तो क्यों? – Laviak