Apache Solrとは何ですか?そして、なぜあなたはそれを使うべきなのか

Apache Solrは、Apache Luceneのサブプロジェクトです。これは、最近作成された検索およびインデックス技術の背後にあるインデックス技術です。Solrは本質的に検索エンジンですが、それだけではありません。これは、トランザクションをサポートするNoSQLデータベースです。これは、SQLサポートを提供し、分散して実行するドキュメントデータベースです。

面白そうですか?よく見るために私に参加してください。(完全な開示:私はSolrプロジェクトの主要な貢献者の多くを雇用しているLucidworksで働いています。)

理想的には8GB以上のRAMを備えたまともなマシン(または単にAWSインスタンスを使用する)が必要です。Solrは//lucene.apache.org/solrにあります。Java仮想マシンバージョン8も必要です。Solrをディレクトリに解凍/解凍し、JAVA_HOMEが設定されていること、およびJavaバイナリがパスにあることを確認します。Solrが存在するディレクトリに移動し、と入力しbin/solr start -e cloud -nopromptます。これにより、ラップトップで2ノードクラスターが開始され、gettingstartedというサンプルコレクションが既に読み込まれています。

通常の起動は、bin/solr start -cSolrを「クラウド」モードで起動することです。しかし、タイヤを蹴るつもりなら、たとえそれがあなた自身のラップトップ上にあるとしても、あなたは本当にマルチノードインストールを見たいと思うでしょう。Solr Cloudは、最新のSolrインストールを実行する方法です。なしで開始する-c場合は、レガシーモードで開始します。それは悪いことです。

ドキュメントとコレクション

Solrはドキュメント構造のデータベースです。「Person」などのエンティティは、名前、住所、メールアドレスなどのフィールドで構成されています。これらのドキュメントはコレクションに保存されます。コレクションは、リレーショナルデータベースのテーブルに最も近いアナログです。ただし、リレーショナルデータベースとは異なり、「Person」にはエンティティを完全に含めることができます。つまり、Personに複数のアドレスがある場合、それらのアドレスを1つの「Person」ドキュメントに保存できます。リレーショナルデータベースでは、個別のアドレステーブルが必要になります。

人{

 "Id": "1333425"、

 「first_name」:「Francis」、

 「middle_name」:「J。」、

 「姓」:「アンダーウッド」、

 「住所」:[「1600Pennsylvania Ave NW、Washington、DC 20500」、「1609 Far St. NW、Washington、DC、20036」]、

 「電話」:[「202-456-1111」、「202-456-1414」]

}

シャード、レプリカ、コア

ほとんどのリレーショナルデータベースとは異なり、データは自動的にシャーディングされ、SolrCloudを介して複製されます。これは、適切に構成されたコレクションにドキュメントを書き込むと、Solrインスタンスの1つに配布されることを意味します。それが「シャーディング」です。これは、読み取りパフォーマンスを向上させるために行われます。各ドキュメントは、冗長性のために少なくとも1回(構成可能)複製またはコピーされます。つまり、Solrインスタンスが失われ、クラスター全体のパフォーマンスが低下するだけで、データが失われることはありません。

クラスターは「ノード」のセットであり、Solrを実行するJava仮想マシン(JVM)インスタンスです。ノードには複数の「コア」を含めることができます。各コアは、論理的な「シャード」のレプリカです。通常、コアは、文字列として連結されたコレクション、シャード番号、およびレプリカ番号によって識別されます。

コレクションの作成

RESTのようなHTTPインターフェースがありますが、bin/solr(またはbin/solr.cmd)コマンドを使用してコレクションを作成および制御できます。物議を醸すトピックを使用して、公開データセットを見つけましょう。Data.govから医療費データのコピーを入手します。簡単にするために、CSVとして取得します。指示どおりにSolrを開始したとすると、次のコマンドを使用してippsというコレクションを作成します。

bin / solr create_collection -d basic_configs -c ipps

次に、データをコレクションにロードしましょう。まず、CSVファイルのいくつかを修正する必要があります。すべての$文字を削除します。また、フィールド名の一番上の行で、フィールドをスペースからアンダースコアに変更します。このように読んでください:

DRG_Definition、Provider_Id、Provider_Name、Provider_Street_Address、Provider_City、Provider_State、Provider_Zip_Code、Hospital_Referral_Region_Description、Total_Discharges、Average_Covered_Charges、Average_Total_Payments、Average_Medicare_Payments

Solrに組み込まれているツール(私の会社が販売している製品に組み込まれているツールなど)よりも強力なETLツールがありますが、全体として、これは複雑な修正ではありませんでした。

ただし、データをロードする前に、リレーショナルデータベースにあるものと同様の「スキーマ」を作成する必要があります。curlLinux / Macのコマンドでそれを行うか、PostmanのようなGUIツールを使用することができます。

curl -X POST -H'Content-type:application / json '—data-binary' {

 「フィールドの追加」:{

     「名前」:「DRG_Definition」、

     「type」:「text_general」、

     「インデックス付き」:true、

     「保存済み」:true

  }、

 「フィールドの追加」:{

     「name」:「Provider_Id」、

     「type」:「plong」、

     “docValues”:true,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Provider_Name”,

     “type”:”text_general”,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Provider_Street_Address”,

     “type”:”string”,

     “indexed”:false,

     “stored”:true

  },

 “add-field”:{

     “name”:”Provider_City”,

     “type”:”string”,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Provider_State”,

     “type”:”string”,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Provider_Zip_Code”,

     “type”:”string”,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Hospital_Referral_Region_Description”,

     “type”:”text_general”,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Total_Discharges”,

     “type”:”pint”,

     “docValues”:true,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Average_Covered_Charges”,

     “type”:”pdouble”,

     “docValues”:true,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Average_Total_Payments”,

     “type”:”pdouble”,

     “docValues”:true,

     “indexed”:true,

     “stored”:true

  },

 “add-field”:{

     “name”:”Average_Medicare_Payments”,

     “type”:”pdouble”,

     “docValues”:true,

     “indexed”:true,

     “stored”:true

  }

}'  //localhost:8983/solr/ipps/schema

These are field names, field types, and whether or not to index and store the field. You can find out more about Solr’s data types and overall schema in the reference guide.

Now that we’ve got a schema we can “post” the data into Solr. There are many routes to do this. You could use curl or Postman, but Solr includes a command line tool, bin/post, which will be available out of the box on Linux and MacOS.

bin/post -c ipps -params "rowid=id" -type "text/csv" /home/acoliver/Downloads/Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DRG__-_FY2011.csv

On Windows:

java -Dtype=text/csv -Dc=ipps -Dparams="rowid=id" -jar example\exampledocs\post.jar \Users\acoliver\Downloads\Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DRG__-_FY2011.csv

W00t you have data!

Querying your data

There are language bindings for Solr that you can use for Java or Python, or if you’re more of a power developer you can use the one for PHP. Or you could just use curl or Postman or your browser.

Paste this into an address bar:

//localhost:8983/solr/ipps/select?indent=on&q=*:*&wt=json

This URL is a simple query that returns the 10 most relevant results. You can change the pagination and find out more about Solr’s Solr’s query language and even alternative query parsers in the reference guide. If you want to see the same thing in XML you can configure that.

Maybe you want to do something a bit more advanced. Below finds procedures in the town I live in:

//localhost:8983/solr/ipps/select?indent=on&q=Provider_State:NC%20AND%20Hospital_Referral_Region_Description:%22*Durham%22&wt=json

You can go much further and do more summaries and calculations and fuzzy matches.

Solr administration

Some of you are like “Good gosh, the command line scares me!” So that’s fine, Solr has a GUI. Got to //localhost:8983/solr and see this beauty:

If you select your collection on the side, you can even go to a screen that will let you fill in query parameters:

If that screen gives you a headache, you can just go to //localhost:8983/solr/ipps/browse.

We’ve done simple text queries. You can also do ranges and spatial searches. If the “relevance” sorting isn’t working for you, you can do more advanced expressions and have Solr return things “as they are found” much like an RDBMS does it. You can sort on various fields and filter by categories. You can even have it “learn to rank”—a machine learning capability that lets Solr “learn” what users think is the most relevant result. We’ve really only scratched the surface.

Why Solr?

So clearly you might choose to use Solr if you need a search engine. However, it is also a redundant, distributed document database that offers SQL (out of the box) for those who want to connect tools like Tableau. It is extensible in Java (and other JVM languages), and yet with the REST-like interface you can easily speak JSON or XML to it.

キーで検索し、ほとんどの場合書き込みを行う単純なデータがある場合、Solrは最良の選択ではない可能性があります。Solrは、Key-Valueストアと同じくらい効率的にするには、より大きなことを行うには配管が多すぎます。

検索が非常にテキスト中心である場合、Solrは明確な選択です。ただし、携帯電話をハッキングして現在地を追跡しているすべての人の空間検索など、それほど明白ではないケースもあります。プーチンさんもSolrを選びたいと思うかもしれません。

とにかく、友達は友達にSQLbla like '%stuff' クエリをさせないことを覚えておいてください。