我的查询为:
try
{
AutoResetEvent _eventNotify = new AutoResetEvent(false);
WaitHandle[] waitHandles = new WaitHandle[]
{_eventNotify, eventTerminate };
while (!eventTerminate.WaitOne(0, true))
{
result = RegNotifyChangeKeyValue(registryKey, false, regFilter, _eventNotify.SafeWaitHandle, true);
if (WaitHandle.WaitAny(waitHandles) == 0)
{
retVal = RegQueryValueEx(registryKey, registryValueName, 0, ref type, pResult, ref size);
if (retVal == 0)
{
string currentValue = Marshal.PtrToStringAnsi(pResult);
if(!cachedValue.Equals(currentValue,StringComparison.InvariantCultureIgnoreCase))
{
OnRegistryChanged();
}
}
}
}
}
finally
{
if (registryKey != IntPtr.Zero)
{
RegCloseKey(registryKey);
}
}
query_arr 是:
select id
from events
where description is not null
and (name ilike any (query_arr)
or description ilike any (query_arr)
or additional_info ilike any (query_arr)
or venue_name ilike any (query_arr)
or other_category ilike any (query_arr)
or eventful_category ilike any (query_arr) )
但是现在我需要匹配完整的单词而不是{'%Tomato%','%Potato%','%Pines%'}
ilike
符号,因为如果描述是'Porcupines是rodentian哺乳动物'那么 query_arr < / strong>单词' pines '匹配,这是不正确的。
因此,我需要在查询的表列中的任何位置匹配完整的单词。
答案 0 :(得分:1)
FTS - 是一个庞大而复杂的主题。不要原样使用我的例子。
select id from events where to_tsquery('Tomato Potato Pines') @@ to_tsvector(events::text);
答案 1 :(得分:0)
您可以在PostgreSql中使用此语法
~*ANY('{query_arr}'::text[])
您的查询应该是这样的
select id from events where description is not null and (name ~*ANY('{query_arr}'::text[]) or description ~*ANY('{query_arr}'::text[]) or additional_info ~*ANY('{query_arr}'::text[]) or venue_name ~*ANY('{query_arr}'::text[]) or other_category ~*ANY('{query_arr}'::text[]) or eventful_category ~*ANY('{query_arr}'::text[])
答案 2 :(得分:0)
在这种情况下更改
{'%Tomato%','%Potato%','%Pines%'}
到
{'% Tomato %','% Potato %','% Pines %'}
应该够了吗?..