Springboot 2(45)集積solr 7,solrCloud

24265 ワード

ソースアドレス
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クエリに等しい
  • 基本クエリー
  • 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}
    サービスクラスの追加
    
    @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){
    
        }
    
    }