Zrozumienie wiodącej wydajności symboli wieloznacznych Lucene
Lucene domyślnie nie zezwala na prowadzenie wieloznacznych znaków w wyszukiwanych terminach,ale można to włączyć z:
QueryParser#setAllowLeadingWildcard(true)
Rozumiem, że użycie wiodącego symbolu wieloznacznego uniemożliwia Lucene korzystanie z indeksu. Wyszukiwania z wiodącym symbolem wieloznacznym muszą skanować cały indeks.
Jak zademonstrować wydajność wiodącego zapytania wieloznacznego? Kiedy można z niego korzystaćsetAllowLeadingWildcard(true)
?
Zbudowałem indeks testowy z 10 milionami dokumentów w postaci:
{ name: random_3_word_phrase }
Indeks ma 360M na dysku.
Moje zapytania testowe działają dobrze i nie byłem w stanie zademonstrować problemu z wydajnością. Na przykład zapytanie oname:*ing
produkuje ponad 1,1 miliona dokumentów w mniej niż 1 sekundę. Zapytaniename:*ing*
produkuje ponad 1,5 miliona dokumentów w tym samym czasie.
Co tu się dzieje Dlaczego nie jest tak wolno? Czy 10 000 000 dokumentów nie wystarczy? Czy dokumenty muszą zawierać więcej niż jedno pole?