Comparison of full text search engine - Lucene, Sphinx, Postgresql, MySQL?

前端 未结 9 1841
遥遥无期
遥遥无期 2020-11-22 14:20

I\'m building a Django site and I am looking for a search engine.

A few candidates:

  • Lucene/Lucene with Compass/Solr

  • Sphinx

相关标签:
9条回答
  • 2020-11-22 15:03

    Good to see someone's chimed in about Lucene - because I've no idea about that.

    Sphinx, on the other hand, I know quite well, so let's see if I can be of some help.

    • Result relevance ranking is the default. You can set up your own sorting should you wish, and give specific fields higher weightings.
    • Indexing speed is super-fast, because it talks directly to the database. Any slowness will come from complex SQL queries and un-indexed foreign keys and other such problems. I've never noticed any slowness in searching either.
    • I'm a Rails guy, so I've no idea how easy it is to implement with Django. There is a Python API that comes with the Sphinx source though.
    • The search service daemon (searchd) is pretty low on memory usage - and you can set limits on how much memory the indexer process uses too.
    • Scalability is where my knowledge is more sketchy - but it's easy enough to copy index files to multiple machines and run several searchd daemons. The general impression I get from others though is that it's pretty damn good under high load, so scaling it out across multiple machines isn't something that needs to be dealt with.
    • There's no support for 'did-you-mean', etc - although these can be done with other tools easily enough. Sphinx does stem words though using dictionaries, so 'driving' and 'drive' (for example) would be considered the same in searches.
    • Sphinx doesn't allow partial index updates for field data though. The common approach to this is to maintain a delta index with all the recent changes, and re-index this after every change (and those new results appear within a second or two). Because of the small amount of data, this can take a matter of seconds. You will still need to re-index the main dataset regularly though (although how regularly depends on the volatility of your data - every day? every hour?). The fast indexing speeds keep this all pretty painless though.

    I've no idea how applicable to your situation this is, but Evan Weaver compared a few of the common Rails search options (Sphinx, Ferret (a port of Lucene for Ruby) and Solr), running some benchmarks. Could be useful, I guess.

    I've not plumbed the depths of MySQL's full-text search, but I know it doesn't compete speed-wise nor feature-wise with Sphinx, Lucene or Solr.

    0 讨论(0)
  • 2020-11-22 15:04

    SearchTools-Avi said "MySQL text search, which doesn't even index words of three letters or fewer."

    FYIs, The MySQL fulltext min word length is adjustable since at least MySQL 5.0. Google 'mysql fulltext min length' for simple instructions.

    That said, MySQL fulltext has limitations: for one, it gets slow to update once you reach a million records or so, ...

    0 讨论(0)
  • 2020-11-22 15:13

    I don't know Sphinx, but as for Lucene vs a database full-text search, I think that Lucene performance is unmatched. You should be able to do almost any search in less than 10 ms, no matter how many records you have to search, provided that you have set up your Lucene index correctly.

    Here comes the biggest hurdle though: personally, I think integrating Lucene in your project is not easy. Sure, it is not too hard to set it up so you can do some basic search, but if you want to get the most out of it, with optimal performance, then you definitely need a good book about Lucene.

    As for CPU & RAM requirements, performing a search in Lucene doesn't task your CPU too much, though indexing your data is, although you don't do that too often (maybe once or twice a day), so that isn't much of a hurdle.

    It doesn't answer all of your questions but in short, if you have a lot of data to search, and you want great performance, then I think Lucene is definitely the way to go. If you're not going to have that much data to search, then you might as well go for a database full-text search. Setting up a MySQL full-text search is definitely easier in my book.

    0 讨论(0)
  • 2020-11-22 15:13

    I'm looking at PostgreSQL full-text search right now, and it has all the right features of a modern search engine, really good extended character and multilingual support, nice tight integration with text fields in the database.

    But it doesn't have user-friendly search operators like + or AND (uses & | !) and I'm not thrilled with how it works on their documentation site. While it has bolding of match terms in the results snippets, the default algorithm for which match terms is not great. Also, if you want to index rtf, PDF, MS Office, you have to find and integrate a file format converter.

    OTOH, it's way better than the MySQL text search, which doesn't even index words of three letters or fewer. It's the default for the MediaWiki search, and I really think it's no good for end-users: http://www.searchtools.com/analysis/mediawiki-search/

    In all cases I've seen, Lucene/Solr and Sphinx are really great. They're solid code and have evolved with significant improvements in usability, so the tools are all there to make search that satisfies almost everyone.

    for SHAILI - SOLR includes the Lucene search code library and has the components to be a nice stand-alone search engine.

    0 讨论(0)
  • 2020-11-22 15:13

    Just my two cents to this very old question. I would highly recommend taking a look at ElasticSearch.

    Elasticsearch is a search server based on Lucene. It provides a distributed, multitenant-capable full-text search engine with a RESTful web interface and schema-free JSON documents. Elasticsearch is developed in Java and is released as open source under the terms of the Apache License.

    The advantages over other FTS (full text search) Engines are:

    • RESTful interface
    • Better scalability
    • Large community
    • Built by Lucene developers
    • Extensive documentation
    • There are many open source libraries available (including Django)

    We are using this search engine at our project and very happy with it.

    0 讨论(0)
  • 2020-11-22 15:13

    I have used Solr, in my project and it is the best so far.

    0 讨论(0)
提交回复
热议问题