---
title: "ルセーヌからソルへの移動"
slug: "moving-from-lucene-to-solr"
abstract: "このトピックでは、LuceneとSolrの違いについて説明し、知っておくべき点を説明します。"
---
# ルセーヌからソルへの移動

Lucene検索エンジンのサポートは、Sitecore 9.3以降では終了しています。Solr検索エンジンは使用できます。SolrはSitecoreインストール時にデフォルトでインストールおよび設定されています。

このトピックでは、LuceneからSolrに移行した際に見られる違いについて説明しています。

## LINQ API

LINQ APIを使ったクエリでは、LuceneとSolrでわずかに異なる結果が得られます。

### StartsWith

*StartsWith* LINQメソッドのSolr実装は各単語の先頭の値にマッチし、Luceneはフィールド全体の値にマッチします。

LINQクエリ

ソルの成績

ルーセンの結果

x.Name.StartsWith("world")

世界  
  
世界は素晴らしい  
  
こんにちは、世界

世界  
  
世界は素晴らしい

### 終わり

Solrの*EndsWith* LINQメソッドの実装は各単語の末尾の値にマッチし、Luceneはフィールド全体の値にマッチします。

LINQクエリ

ソルの成績

ルーセンの結果

x.Name.EndsWith("world")

世界  
  
こんにちは、世界  
  
世界は素晴らしい

世界  
  
こんにちは、世界

### 大文字に細かい文字列比較

Solrがプレーンテキストフィールドタイプ(例えば *文字列* や *テキスト*)を検索する場合、通常は大文字小文字を区別します。例外は、\_fullpathや \_nameのような一部のシステムフィールドです。

LINQクエリ

ソルの成績

ルーセンの結果

.Where(x => x.TemplateName == "sample item")

「サンプルアイテム」テンプレートに基づくアイテムは返品されません

「サンプルアイテム」テンプレートに基づく商品返品

### アイテムレベルブースト

アイテムレベルのブーストは、Solr検索プロバイダー(Sitecore 9.1.0以降)でサポートされていません。Solrのリリースノートには、Solr 7以降ではインデックス時間ブーストはサポートされていないと記載されています。詳細は[https://lucene.apache.org/solr/guide/7\_2/major-changes-in-solr-7.html](https://lucene.apache.org/solr/guide/7_2/major-changes-in-solr-7.html)をご覧ください。つまり、9.1.0以降Sitecoreでは、アイテムブースティングやフィールドブースティングの両方でインデックスタイムブーストはサポートされていません。

また、[Sitecore Solr互換性表](https://kb.sitecore.net/articles/227897)もご参照ください。

## 構成の違い

Solr検索プロバイダーとLucene検索プロバイダーの設定方法にはいくつかの違いがあります。組み込みのSitecoreフィールドでは移行は容易ですが、自社のフィールドを追加する場合は違いを認識しておく必要があります。

### フィールドの種類

SolrはLuceneよりも多くのフィールドタイプをサポートしています。Luceneではフィールドは文字列または数値のいずれかですが、Solrはsolrのようなより具体的な型をサポートしています *。DatePointField*、*solr。floatPointField*、そして*solr。TextField*。

例えば、チェックボックスフィールドがあり、ブール変換器( *Bool.ToString()* はインデックスに送られる値)がない場合、このフィールドをファセットクエリで使うと、Luceneでは0と1がカテゴリ名として表示されますが、Solrではfalseとtrueが得られます。

公式のSolrドキュメントにはさらに詳しい情報があります。

### Solrスキーマ

Luceneではインデックスに追加する際にフィールド設定を制御できますが、Solrではドキュメントを追加する前にスキーマの提供が必要です。

Sitecoreコントロールパネルには**Populate Solr管理スキーマ** ツールがあり、Solrで動作させるために必要なスキーマをアップロードできますSitecore。インデックス作成を始める前に、このツールを少なくとも一度は使う必要があります。Sitecoreインストールフレームワークを使う場合は、展開時にスキームが入力されます。

したがって、すべてのスキーマ関連の設定はフィールドマップ構成から削除されています。フィールドマップですべてのフィールドやフィールドタイプに対して値を設定する必要はありません。代わりに、フィールドマップ内のフィールドやフィールドタイプをSolrスキーマ内のフィールドや動的フィールドのいずれかにマッチさせます。

フィールドマップのフィールド/フィールドタイプ構成の*returnType*属性を、Solrフィールドマップで定義された*typeMatch*ノードのいずれかに設定します。

![solr-field-map.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/platform-administration-and-architecture/images/solr-field-map.png)

Solrの設定方法についての詳細が載った [ウォークスルー](https://doc.sitecore.com/xp/ja/developers/103/platform-administration-and-architecture/walkthrough--setting-up-solr.html "Walkthrough: Setting up Solr") があります。

### Solrにおけるフィールド名の翻訳

各*typeMatch*ノードは、Solrスキーマで定義された動的フィールドの一つに対応し、フィールド名にパターンを適用します。*fieldNameFormat*属性がこのパターンを設定します。インデックス付け時には、フィールド名はパターンに従ってフォーマットされます。例えば、上記の例では、titleフィールドはtitle\_s、createdフィールドは*fieldNamFormat*属性の値に基づいて、created\_tdtとしてフォーマットされています。

インデックス作成時。Solrはフィールド名とスキーマで定義されたフィールドを照合します。もし一致を見つけたら、Solrはそのフィールドの構成を適用します。数学的に見つからなければ、Solrはフィールド名を動的フィールドパターンと照合します。

![solr-field-trans.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/platform-administration-and-architecture/images/solr-field-trans.png)

この例では、動的フィールドが一致しています。これらのフィールドはそれぞれ *文字列* 型と*pdate*型であるため、Solrはこれらの型の構成を追加されたフィールドに適用します。

![solr-field-trans-2.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/platform-administration-and-architecture/images/solr-field-trans-2.png)

通常、**Populate Solr管理スキーマ** ツールが提供する動的フィールドは必要なすべてのフィールド構成です。しかし非常に稀な場合、既存の構成とは異なるフィールドや動的フィールドをスキーマに追加する必要がある場合があります。その一つの方法はSolrでスキーマを直接変更することですが、後でスキーマポピュレートツールを実行すると変更が失われることに注意してください。代わりに、Solrスキーマのカスタマイズを行う新しいプロセッサを注入して*contentSearch.PopulateSolrSchema*パイプラインを変更することをお勧めします。

[Solrフィールド名解決を使うことで](https://doc.sitecore.com/xp/ja/developers/103/platform-administration-and-architecture/using-solr-field-name-resolution.html "Using Solr field name resolution") 、さらに詳しい情報が得られます。

> !重要一般的な推奨としては、*typeMatch*構成が十分に柔軟でない場合のみスキーマを変更することです。