[백업][가리사니] apache solr 스키마 만들기
solr
이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.
스키마 생성
예제 스키마 이름은 아래와 같습니다.
스키마 이름 | 설명 |
---|---|
prod_gs_forum | 상용_가리사니_포럼 |
스키마 이름 대신 prod_gs_forum 로 설명합니다.
- 복사: server/solr/configsets/_default/conf -> server/solr/conf
- 이름변경: conf -> prod_gs_forum
- core.properties 파일을 새로 만들고 아래와 같이 입력합니다.
config=solrconfig.xml dataDir=data name=prod_gs_forum schema=managed-schema.xml
스키마 필드 편집
- 열기: server/solr/prod_gs_forum/managed-schema.xml
- 주석도 많고 굉장히 복잡하지만 prod_gs_forum 에 적용하고 싶은 데이터는 아래와 같은 모양입니다.
필드명 | 설명 | 저장여부(N은 인덱싱만) |
---|---|---|
forum_id | 포럼ID | N |
topic_id | 토픽ID (고유값) | Y |
subject | 제목 | N |
tags | 태그 | N |
content | 내용 | N |
user_name | 작성자 | N |
reg_dt | 등록일 | N |
그렇다면 managed-schema.xml 는 다음과 같이 편집 될 수 있습니다.
- version 은 기본값이다.
- uniqueKey 는 plong 타입을 사용할 수 없어 string 으로 지정하였다. ``` <?xml version=”1.0” encoding=”UTF-8” ?>
# 스키마 데이터 입력
- 이제 data-import 를 작성하려고 했는데...
- solr 9 에서 data-import 가 제거 되었습니다..
(사실 방향성 자체는 이것이 맞습니다. 데모 만들기 귀찮을 뿐.)
- 조금 귀찮아 졌지만 아래처럼 직접 작성했습니다.
- 원하면 서드파티로 설치 가능하며 키워드는 solr 9 DIH 라고 검색하시면 될 것입니다.
@GetMapping(“/solr/data-import”)
fun dataImport() {
dataSource.connection.use { conn ->
conn.prepareStatement(“SELECT * FROM forum_topic ORDER BY topic_id”).use { pstmt ->
pstmt.executeQuery().use { rs ->
val list = mutableListOf
while (rs.next()) {
list.add(objectMapper.writeValueAsString(mapOf<String, Any>(
"forum_id" to rs.getString("forum_id"),
"topic_id" to rs.getLong("topic_id"),
"subject" to rs.getString("subject"),
"tags" to rs.getString("tags"),
"content" to rs.getString("content"),
"user_name" to rs.getString("user_name"),
"reg_dt" to rs.getTimestamp("reg_dt").toInstant().toString(),
)))
// 100개씩 모아서 보내기
if (list.size >= 1000) {
flush(list)
}
}
flush(list)
}
}
} }
fun flush(list: MutableList
val headers = HttpHeaders()
headers.contentType = MediaType.APPLICATION_JSON
val url = "http://localhost:8983/solr/prod_gs_forum/update?commit=true"
val data = list.joinToString(",", "[", "]")
val rest: String? = restTemplate.postForObject(url, HttpEntity<String>(data, headers), String::class.java)
println(rest)
list.clear() } ``` - 이렇게 실행 시킨 후 아래와 같이 검색을 해보았다.
참고
- https://solr.apache.org/guide/