Solr - synonimy zawierające wiele słów

Szybkie pytanie, nie wiem, jak radzić sobie z synonimami zawierającymi spację! Mam następującą konfigurację:

Plik konfiguracyjny SOLR

<fieldType ... >
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" 
                            catenateWords="1" 
                            preserveOriginal="1"
                            splitOnCaseChange="1"
                            generateWordParts="1" 
                            generateNumberParts="1"         
                            catenateNumbers="1" 
                            catenateAll="1" 
                            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
  </analyzer>
  <analyzer type="query">    
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="70" />
    <filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

Mój plik: syn.txt

st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles

Wszystko działało dobrze, z wyjątkiem synonimu:

"NYC => New York"

Zrobiłem kilka badań i znalazłem następujące:

Pamiętaj, że chociaż SynonymFilter z przyjemnością będzie pracować z synonimami zawierającymi wiele słów (np. „Herbatnik morski, morski biscit, seabiscuit”)

Zalecanym podejściem do radzenia sobie z takimi synonimami jest rozszerzenie synonimu podczas indeksowania. Dzieje się tak, ponieważ istnieją dwa potencjalne problemy, które mogą pojawić się w czasie zapytania:

QueryParser Lucene tokenizuje na białym polu przed podaniem dowolnego tekstu do analizatora, więc jeśli ktoś szuka słów sea biscit, analizator otrzyma osobno słowa „morze” i „biscit” i nie będzie wiedział, że pasują do synonimu .

Wyszukiwanie fraz (tj. „Sea biscit”) spowoduje, że QueryParser przekaże cały ciąg do analizatora, ale jeśli SynonymFilter jest skonfigurowany do rozszerzenia synonimów, to kiedy QueryParser pobiera wynikową listę tokenów z Analyzera, to skonstruuje MultiPhraseQuery, która nie przyniesie pożądanego efektu.

Wynika to z ograniczonego mechanizmu dostępnego analizatorowi do wskazania, że ​​dwa terminy zajmują tę samą pozycję: nie ma możliwości wskazania, że ​​„fraza” zajmuje tę samą pozycję co termin.

W naszym przykładzie wynikowym MultiPhraseQuery byłoby „(sea | sea | seabiscuit) (biscuit | biscit)”, które nie pasowałoby do prostego przypadku „seabiscuit” występującego w dokumencie

Próbowałem więc zmienić mój plik konfiguracyjny i dodać filtry przy indeksowaniu, ale nie działa.

Czy coś ma jakieś pomysły?

questionAnswers(4)

yourAnswerToTheQuestion