Springboot 2(45)集積solr 7,solrCloud
24265 ワード
ソースアドレス
Springboot 2チュートリアルシリーズ
solrcloudインポートmysqlデータ構成
最も簡単なsolr 7クラスタ構築(tomcatは不要)
導入依存
構成の追加(アプリケーション.yml)
solrオブジェクトの追加
solrCoreNameは対応するcollection名です
Repositoryクラスの追加
通過?0 searchTermの値を取得し、@Queryのvalueはqクエリに等しく、filtersはfqクエリに等しい基本クエリー qクエリのキーワード、このパラメータが最も重要です.例えば、q=id:1、デフォルトはq=:、
flどのフィールドを返すかをカンマまたはスペースで区切るかを指定します.注意:フィールドは大文字と小文字を区別します.たとえば、fl=id、title、sort
startは結果のいくつかのレコードを返して開始し、一般的にページング用で、デフォルト0で開始します.
rowsは、戻り結果に最大何個のレコードがあるかを指定し、デフォルト値は10で、startに合わせてページングを実現します.
sortソート方式、例えばid descは「id」降順を表す
wt(writer type)出力フォーマットを指定し、xml、json、phpなどがあります.
fq(filter query)はクエリーを考慮しすぎて、オプションのフィルタクエリーを提供します.qクエリ適合結果において同時に適合するfq条件のクエリ結果を返す.例えば、q=id:1&fq=sort:[1 TO 5]であり、キーワードidが1であり、sortが1から5である.
dfデフォルトのクエリーフィールドで、一般的にデフォルトで指定されます.
qt(query type)は、クエリーリクエストを処理するためにそのタイプを指定します.一般的には指定せず、デフォルトはstandardです.
indentが返した結果がインデントされているかどうかは、デフォルトで閉じ、indent=true|onで開き、一般的にjson、php、phps、ruby出力をデバッグする必要があります.
バージョンクエリ構文のバージョンは、使用しないことを推奨し、サーバによってデフォルト値を指定します. Solrの検索演算子 「:」指定フィールドは、すべての値を返すなど、指定した値を調べます*
“?” 単一の任意の文字を表すパス
「」は、複数の任意の文字の一致を表します(取得したアイテムで使用または?記号を開始できません)
「~」は曖昧検索を表し、スペルが「roam」に似ている項目を検索するように書く.roamはfoamやroamsのような形をした単語を見つける.roam0.8,戻り類似度が0.8以上のレコードを検索する.
AND、|ブールオペレータ
OR,&&ブールオペレータ
NOT、!、-(除外オペレータは、アイテムと構成クエリーを単独で使用できません)
「+」はオペレータが存在し、シンボルが必要です+」の後のアイテムは、ドキュメントの対応するドメインに存在する必要があります.²
()サブクエリの構成に使用
[]範囲検索を含む、ある時間帯レコードを検索する、ヘッダーと末尾を含む、date:[201507 TO 201510]
{}範囲検索を含まない、ある時間帯レコードを検索する、ヘッダとテールdateを含まない:{201507 TO 201510}
サービスクラスの追加
コントロールメソッドの追加(テスト)
ハイライトされたクエリー
ファイルインデックスの作成
Springboot 2チュートリアルシリーズ
solrcloudインポートmysqlデータ構成
最も簡単なsolr 7クラスタ構築(tomcatは不要)
導入依存
org.springframework.boot
spring-boot-starter-data-solr
構成の追加(アプリケーション.yml)
#solrcloud
spring.data.solr.repositories.enabled: true
spring.data.solr.zk-host: 10.10.2.137:2181,10.10.2.138:2181,10.10.2.139:2181
#
#spring.data.solr.host: http://localhost:8080/solr
#spring.data.solr.core: collection1
solrオブジェクトの追加
@Data
@Accessors(chain = true)
@SolrDocument(solrCoreName = "demo")
public class UserDto {
@Field("id")
private String userId;
@Field("address")
private String address;
@Dynamic //
@Field("item_spec_*")
private Map<String,String> specMap;//
}
solrCoreNameは対応するcollection名です
Repositoryクラスの追加
@Repository
public interface UserRepository extends SolrCrudRepository<UserDto, String> {
@Query(value="address:?0",fields ={"address"},filters = {"id:?0"})
public List<UserDto> findByPage(String searchTerm, Pageable Pageable);
}
通過?0 searchTermの値を取得し、@Queryのvalueはqクエリに等しく、filtersはfqクエリに等しい
flどのフィールドを返すかをカンマまたはスペースで区切るかを指定します.注意:フィールドは大文字と小文字を区別します.たとえば、fl=id、title、sort
startは結果のいくつかのレコードを返して開始し、一般的にページング用で、デフォルト0で開始します.
rowsは、戻り結果に最大何個のレコードがあるかを指定し、デフォルト値は10で、startに合わせてページングを実現します.
sortソート方式、例えばid descは「id」降順を表す
wt(writer type)出力フォーマットを指定し、xml、json、phpなどがあります.
fq(filter query)はクエリーを考慮しすぎて、オプションのフィルタクエリーを提供します.qクエリ適合結果において同時に適合するfq条件のクエリ結果を返す.例えば、q=id:1&fq=sort:[1 TO 5]であり、キーワードidが1であり、sortが1から5である.
dfデフォルトのクエリーフィールドで、一般的にデフォルトで指定されます.
qt(query type)は、クエリーリクエストを処理するためにそのタイプを指定します.一般的には指定せず、デフォルトはstandardです.
indentが返した結果がインデントされているかどうかは、デフォルトで閉じ、indent=true|onで開き、一般的にjson、php、phps、ruby出力をデバッグする必要があります.
バージョンクエリ構文のバージョンは、使用しないことを推奨し、サーバによってデフォルト値を指定します.
“?” 単一の任意の文字を表すパス
「」は、複数の任意の文字の一致を表します(取得したアイテムで使用または?記号を開始できません)
「~」は曖昧検索を表し、スペルが「roam」に似ている項目を検索するように書く.roamはfoamやroamsのような形をした単語を見つける.roam0.8,戻り類似度が0.8以上のレコードを検索する.
AND、|ブールオペレータ
OR,&&ブールオペレータ
NOT、!、-(除外オペレータは、アイテムと構成クエリーを単独で使用できません)
「+」はオペレータが存在し、シンボルが必要です+」の後のアイテムは、ドキュメントの対応するドメインに存在する必要があります.²
()サブクエリの構成に使用
[]範囲検索を含む、ある時間帯レコードを検索する、ヘッダーと末尾を含む、date:[201507 TO 201510]
{}範囲検索を含まない、ある時間帯レコードを検索する、ヘッダとテールdateを含まない:{201507 TO 201510}
サービスクラスの追加
@Service
public class UserService {
@Resource
UserRepository userRepository;
public void save(UserDto userDto){
userRepository.save(userDto);
}
// , ID
public List<UserDto> queryByPage(String search){
Pageable pageable = PageRequest.of(0,3,new Sort(Sort.Direction.ASC, "id"));
return userRepository.findByPage(search,pageable);
}
}
コントロールメソッドの追加(テスト)
@RestController
public class SolrController {
@Autowired
private UserService userService;
@RequestMapping("/add/{id}")
public String add(@PathVariable String id,@RequestBody String address){
userService.save(new UserDto().setUserId(id).setAddress(address));
return id;
}
@RequestMapping("/query")
public String query(@RequestBody String address){
List<UserDto> list = userService.queryByPage(address);
return JSON.toJSONString(list);
}
}
ハイライトされたクエリー
public List<Item> queryHeightLight(String address){
List<Item> itemList = new ArrayList<>();
HighlightQuery highlightQuery = new SimpleHighlightQuery(new SimpleStringCriteria("address: "));
HighlightOptions options = new HighlightOptions();
options.addField("address");
options.setSimplePrefix("
");
options.setSimplePostfix("");
highlightQuery.setHighlightOptions(options);
HighlightPage<Item> page = solrTemplate.queryForHighlightPage("demo",highlightQuery,Item.class);
//
List<HighlightEntry<Item>> highlighted = page.getHighlighted();
for (HighlightEntry<Item> itemHighlightEntry : highlighted) {
// SKU
Item item = itemHighlightEntry.getEntity();
//
List<HighlightEntry.Highlight> highlights = itemHighlightEntry.getHighlights();
//
if(highlights!=null && highlights.size()>0 && highlights.get(0).getSnipplets()!=null
&& highlights.get(0).getSnipplets().size()>0){
String snipplets = highlights.get(0).getSnipplets().get(0);
//
item.setTitle(snipplets);
itemList.add(item);
}
}
return itemList;
}
ファイルインデックスの作成
/**
*
*/
public void upFile(){
userRepository.deleteAll();
ContentStreamUpdateRequest up = new ContentStreamUpdateRequest(
"/update/extract");
File file = new File("C:/Users/Administrator/Desktop/demo/test.txt");
try{
up.addFile(file,"text/plain");
up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
CloudSolrClient solrClient = ((CloudSolrClient)solrTemplate.getSolrClient());
solrClient.setDefaultCollection("demo");
solrClient.request(up);
QueryResponse query = solrClient.query(new SolrQuery("*:*"));
SolrDocumentList results = query.getResults();
System.out.println(results);
}catch (Exception e){
}
}