জিআইএন ইনডেক্সড টিএসভিেক্টর কলাম থেকে আংশিক মিল পান


13

আমি এটি জিজ্ঞাসা করে ফলাফল পেতে চাই:

SELECT * FROM (
  SELECT id, subject
  FROM mailboxes
  WHERE tsv @@ plainto_tsquery('avail')
) AS t1 ORDER by id DESC;

এটি tsvধারণ করে সারিগুলিতে কাজ করে এবং ফিরে আসে Available। তবে আমি যদি avai(বাদ পড়ে lable) ব্যবহার করি তবে এটি কিছুই খুঁজে পাবে না।

সব প্রশ্নের অভিধানে থাকতে হবে? আমরা কি এই জাতীয় চিঠিগুলি কেবল জিজ্ঞাসা করতে পারি না? আমার কাছে একটি ডাটাবেস রয়েছে যা ই-মেইল বডি (বিষয়বস্তু) ধারণ করে এবং আমি প্রতি সেকেন্ডে এটির বৃদ্ধি পেতে দ্রুত করতে চাই। বর্তমানে আমি ব্যবহার করছি

... WHERE content ~* 'letters`

উত্তর:


22

সব প্রশ্নের অভিধানে থাকতে হবে?

না। কারণ কেবল শব্দের কান্ড (ব্যবহৃত পাঠ্য অনুসন্ধানের কনফিগারেশন অনুসারে ) সূচকটিতে শুরু হয়। তবে আরও গুরুত্বপূর্ণ:

কোন । কারণ, যে উপরে সম্পূর্ণ টেক্সট খোঁজা হয় করতে সক্ষম উপসর্গ ম্যাচিং :

এটি কাজ করবে:

SELECT id, subject
FROM   mailboxes
WHERE  tsv @@ to_tsquery('simple', 'avail:*')
ORDER  BY id DESC;

3 টি জিনিস নোট করুন :

  1. এই ক্ষেত্রে ব্যবহার করুন to_tsquery()না plainto_tsquery(), কারণ ( ম্যানুয়ালটির উদ্ধৃতি ):

    ... এর plainto_tsqueryইনপুটটিতে tsqueryঅপারেটর, ওজন লেবেল বা উপসর্গের সাথে ম্যাচ লেবেলগুলি সনাক্ত করবে না

  2. 'simple'উত্পন্ন করতে পাঠ্য অনুসন্ধানের কনফিগারেশনটি ব্যবহার করুন tsqueryআপনি স্পষ্টতই 'উপকার' শব্দটি গ্রহণ করতে চান এবং স্টেমিং প্রয়োগ করতে পারেন না।

  3. :*এটি একটি উপসর্গ অনুসন্ধান করতে যোগ করুন , অর্থাত্ 'উপভোগ' দিয়ে শুরু হওয়া সমস্ত লেক্সেমিকে সন্ধান করুন।

গুরুত্বপূর্ণ: এটি নথিতে লেেক্সিম (শব্দ স্টেমস) এর একটি উপসর্গ অনুসন্ধান search ওয়াইল্ডকার্ড ( content ~* 'avail') ছাড়াই নিয়মিত এক্সপ্রেশন ম্যাচ হুবহু এক নয়! পরবর্তীটি বাম-নোঙ্গর করা হয়নি (লেক্সেমিসের শুরুতে) এবং এটি 'ফুয়াওয়াইল' ইত্যাদিও খুঁজে পাবে

আপনি আপনার ক্যোয়ারিতে বর্ণিত রূপটি বা যুক্ত হওয়া নিয়মিত অভিব্যক্তির সমতুল্য চান তা পরিষ্কার নয়। ইতিমধ্যে প্রস্তাবিত @ ট্র্যাগ্রাম সূচকগুলি ( pg_trgm) এর জন্য সঠিক সরঞ্জাম। ডিবিএএসই সম্পর্কিত অনেকগুলি প্রশ্ন রয়েছে, একটি অনুসন্ধান চেষ্টা করুন

সংক্ষিপ্ত বিবরণ:

ডেমো

SELECT *
FROM (
   VALUES
     ('Zend has no framework')
   , ('Zend Framework')
   ) sub(t), to_tsvector(t) AS tsv
WHERE tsv @@ to_tsquery('zend <-> fram:*');
 id |       t        |          tsv
----+----------------+------------------------
  2 | Zend Framework | 'framework':2 'zend':1

সাম্প্রতিক সম্পর্কিত উত্তর (অধ্যায়টি অনুসন্ধানের অনুকূলকরণের জন্য বিভিন্ন পদ্ধতির ):

ইমেল?

যেহেতু আপনি ইমেলগুলি উল্লেখ করেছেন তাই সচেতন হন যে পাঠ্য অনুসন্ধানের পার্সার ইমেলগুলি সনাক্ত করে এবং সেগুলিকে পৃথক শব্দ / লেক্সেমিতে বিভক্ত করে না। বিবেচনা:

SELECT ts_debug('english', 'xangr@some.domain.com')
(email,"Email address",xangr@some.domain.com,{simple},simple,{xangr@some.domain.com})

আমি বিভাজকগুলিকে @এবং .আপনার ইমেলগুলিতে স্থান ( ' ') দিয়ে ইনডেক্সযুক্ত শব্দগুলিতে প্রতিস্থাপন করব ।

এছাড়াও, যেহেতু আপনি ইমেলগুলিতে নামগুলি ইংরেজী (বা অন্য কোনও ভাষা) শব্দের সাথে নয় , তাই আমি 'simple'স্টেমিং এবং অন্যান্য ভাষার বৈশিষ্ট্যগুলি অক্ষম করতে পাঠ্য অনুসন্ধানের কনফিগারেশনটি ব্যবহার করব :

এর ts_vectorসাথে কলামটি তৈরি করুন :

SELECT to_tsvector('simple', translate('joe.xangr@some.domain.com', '@.', '  ')) AS tsv;

আমি এর জন্য আমার উত্তরটি মুছে ফেলছি কারণ যে কোনওভাবেই কারণ আমি প্রথমবারের জন্য স্পষ্টতই ভুল এবং আমার এটির পরিবর্তে স্মরণ করানো হবে না। আপনার জন্য আমার দুটি প্রশ্ন রয়েছে) 1) যেখানে :*নথিভুক্ত রয়েছে, এবং 2) to_tsvector('simple'..)সেই টিএসভির ভবিষ্যত জিজ্ঞাসা করার জন্য খুব সহজেই 'সিম্পল' কনফিগারেশনও প্রয়োজন হবে না এমন নির্দেশাবলীর সাথে হাতে তৈরির কথা উল্লেখ করা উচিত নয় ? আমি মনে করি আপনার একটি স্পেসেক্টর / tsquery উপর স্টেমিং নিষ্ক্রিয় করার ছদ্মবেশগুলি স্পষ্ট করা উচিত।
ইভান ক্যারল

@ ইভানক্রোল: 'সাধারণ' কনফিগারেশন ব্যবহার করার প্রয়োজন নেই । এটি কেবল স্টেমিং এড়ায় (যেমন 'ইঁদুর' থেকে 'ইঁদুর' এর মতো) যা কাঙ্ক্ষিত হতে পারে বা নাও পারে। প্রদত্ত উদাহরণের জন্য কাম্য নয়। ম্যানুয়াল: আমি উপরের লিঙ্কগুলি যুক্ত করেছি ...
এরউইন ব্র্যান্ডসেটেটার

4
@ ইভানক্রোল: পাশাপাশি: ভাবছেন যে আপনি প্রথমবার ভুল করছেন , দ্বিতীয়বার হবে। এবং এটি ভুল হবে, পুনরাবৃত্তি। ;)
এরউইন ব্র্যান্ডসেটেটার

2
@ এরউইন ব্র্যান্ডসটেটার, বাহ, আপনার পথ আমাকে কেবল একটি পূর্ণ গতির অনুসন্ধান দিয়েছে। আপনার পদ্ধতির আগে এটি 0.380msফলাফল পেতে খুব বেশি পছন্দ করে। আপনার পথ পরে এটি গ্রহণ 0.079 ms
xangr

1
@ এক্সাঙ্গর: না, এফটিএস কেবল লেক্সেমির জন্য উপসর্গের মিলের প্রস্তাব করে । আরও কিছু জন্য, দেখুন pg_trgm। এফটিএস দ্রুততর (একটি ছোট সূচক সহ)। আপনি উভয় সূচক একত্রিত করতে পারেন ...
এরউইন ব্র্যান্ডসেটেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.