Napisz własną klasę niestandardowego analizatora podobną do SynonymAnalyzer
w Lucene.Net – Custom Synonym Analyzer. Zastąpienie TokenStream
może rozwiązać ten problem przez potokowanie strumienia za pomocą WhitespaceTokenizer
i LowerCaseFilter
.
Pamiętaj, że twój indeksator i wyszukiwarka muszą używać tego samego analizatora.
Aktualizacja: obsługa wielu oddzielonych przecinkami słowa kluczowe
Jeśli tylko trzeba obsłużyć unspaced rozdzielany przecinkami słowa kluczowe dla szukają nie indeksowania następnie można przekształcić wyrażenie wyszukiwarki expr
jak poniżej.
expr = expr.Replace(',', ' ');
Następnie przechodzą expr
do QueryParser
. Jeśli chcesz obsługiwać inne ograniczniki, takie jak ";" można zrobić to tak:
var terms = expr.Split(new char[] { ',', ';'});
expr = String.Join(" ", terms);
Ale trzeba także sprawdzić za pomocą wyrażenia frazy jak „Sybase, C# ,. netto, Oracle” (wyrażenie zawiera cytat "znaków), które nie powinny być zamienione (The użytkownik szuka dokładne dopasowanie):
expr = expr.Trim();
if (!(expr.StartsWith("\"") && expr.EndsWith("\"")))
{
expr = expr.Replace(',', ' ');
}
wyrażenie może zawierać zarówno frazy i słowa kluczowe, na przykład:
"sybase,c#,.net,oracle" server,c#,.net,sybase
Następnie należy przeanalizować i przetłumaczyć wyrażenie przeszukiwanie do tego:
"sybase,c#,.net,oracle" server c# .net sybase
Jeśli trzeba także obsługiwać unspaced rozdzielany przecinkami słowa kluczowe dla indeksowania to trzeba zanalizować tekst unspaced oddzielonych przecinkami słów kluczowych i przechowywać je w odrębną dziedzinę np. Keywords
(który musi być powiązany z niestandardowym analizatorem).Wtedy twój obsługi wyszukiwania musi przekształcić wyrażenie wyszukiwarki tak:
server,c#,.net,sybase
do tego:
Keywords:server Keywords:c# Keywords:.net, Keywords:sybase
lub prościej:
Keywords:(server, c#, .net, sybase)
to Twój kod źródłowy domeny? A może to tylko przykłady? – phani
@phani to tylko przykłady – Kumar