2013-03-21 9 views
5

W Solr DIH data-config.xml, lepiej sprowadzić jak najwięcej pól, jak to możliwe z kwerendy w głównym podmiotem z JOIN jak:Solr DataImportHandler - JOIN vs. odrębnego podmiotu

<entity name="Lists" 
     pk="l.list_id" 
     query="SELECT l.list_id AS id, l.user_id, lo.is_votable FROM lists l 
       INNER JOIN list_options lo ON lo.list_id = l.list_id"> 

lub użytkowania osobny sub-podmiot jak:

<entity name="Lists" 
     pk="l.list_id" 
     query="SELECT l.list_id AS id, l.user_id FROM lists l"> 

    <entity name="ListOptions" 
      query="SELECT lo.is_votable FROM list_options lo 
        WHERE lo.list_id=${Lists.id}" /> 

</entity> 

Odpowiedz

7

kilka wskazówek, które mogą pomóc podjąć decyzję: -

  • podmioty sub ogień zapytania dla każdego z re sznurki, a więc będą wolniejsze w działaniu, jeśli masz ogromną kolekcję.
  • Jeśli masz odwzorowanie jeden do jednego, możesz użyć łączenia, aby uzyskać wszystkie pola z samym zapytaniem.
  • Jeśli masz wiele rekordów dla korzenia, możesz użyć podjednostki, która prawdopodobnie utworzy pole wielowartościowe. (Nie można użyć pojedynczego zapytania łączenia, ponieważ zwracałoby ono wiele wierszy dla tego samego dokumentu, chyba że chcesz zachować takie zachowanie).
+2

Tak. Potwierdziłem to, testując. Zatrzymałem jedną jednostkę na stole. Czy główne zapytanie plus 11 zapytań w pod-podmiotach. Każda jednostka otworzyła osobne połączenie klienta z bazą danych. Po przeniesieniu 7 zapytań podelementów do głównej kwerendy za pomocą JOIN (jeden do jednego), nastąpiła 3-krotna poprawa szybkości indeksowania. – arun

+0

Funkcja pod-obiektów jest prawie bezużyteczna z powodu powolności. –