Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You summoned me from the FogBugz StackExchange. My name is Jude, I'm the current search architect for FogBugz. </p> <p>Here's a rough outline of how the FogBugz On Demand search architecture is set up[1]:</p> <ul> <li>For reasons related to data portability, security, etc., we keep all of our On Demand databases and indices separate. </li> <li>While we do use Lucene (Lucene.NET, actually), we've modded its backend fairly substantially so that it can store its index entirely in the database. Additionally, a local cache is maintained on each webhost so that unnecessary database hits can be avoided whenever possible.</li> <li>Our filters are almost entirely database-side (since they're used by aspects of FogBugz outside of search), so our search parser separates queries into full-text and non-full-text components, executes the lookups, and combines the results. This is a little unfortunate, as it voids many useful optimizations that Lucene is capable of making.</li> </ul> <p>There are a few benefits to what we've done. Managing the accounts is quite simple, since client data and their index are stored in the same place. There are some negatives too, though, such as a set of really pesky edge case searches which underperform our minimum standards. Retrospectively, our search was cool and well done for its time. If I were to do it again, however, I would <strong>discourage this approach</strong>. </p> <p>Simply, unless your search domain is very special or you're willing to dedicate a developer to blazingly fast search, you're probably going to be outperformed by an excellent product like ElasticSearch, Solr, or Xapian. </p> <p>If I were doing this today, unless my search domain was extremely specific, I would probably use <strong>ElasticSearch, Solr, or Xapian</strong> for my database-backed full-text search solution. As for which, that depends on your auxiliary needs (platform, type of queries, extensibility, tolerance for one set of quirks over another, etc.)</p> <p>On the topic of one large index versus many(!) scattered indices: Both can work. I think the decision really lies with what kind of architecture you're looking to build, and what kind of performance you need. You can be pretty flexible if you decide that a 2-second search response is reasonable, but once you start saying that anything over 200ms is unacceptable, your options start disappearing pretty quickly. While maintaining a single large search index for all of your clients can be vastly more <em>efficient</em> than handling lots of small indices, it's not necessarily faster (as you pointed out). I personally feel that, in a secure environment, the benefit of keeping your client data separated is not to be underestimated. When your index gets corrupted, it won't bring all search to a halt; silly little bugs won't expose sensitive data; user accounts stay modular- it's easier to extract a set of accounts and plop them onto a new server; etc.</p> <p>I'm not sure if that answered your question, but I hope that I at least satisfied your curiosity :-)</p> <p>[1]: In 2013, FogBugz began powering its search and filtering capabilities with ElasticSearch. We like it.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload