🚧 lucene更新删除索引
This commit is contained in:
parent
d8b30d7af9
commit
03c8e339df
@ -7,7 +7,10 @@ import org.apache.lucene.document.TextField;
|
|||||||
import org.apache.lucene.index.IndexWriter;
|
import org.apache.lucene.index.IndexWriter;
|
||||||
import org.apache.lucene.index.IndexWriterConfig;
|
import org.apache.lucene.index.IndexWriterConfig;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
import org.apache.lucene.search.TermQuery;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
@ -19,6 +22,11 @@ import java.util.concurrent.CountDownLatch;
|
|||||||
*/
|
*/
|
||||||
public class ArticleBeanIndex extends BaseIndex<ArticleLucene> {
|
public class ArticleBeanIndex extends BaseIndex<ArticleLucene> {
|
||||||
|
|
||||||
|
public ArticleBeanIndex(
|
||||||
|
String parentIndexPath,int subIndex) {
|
||||||
|
super(parentIndexPath, subIndex);
|
||||||
|
}
|
||||||
|
|
||||||
public ArticleBeanIndex(
|
public ArticleBeanIndex(
|
||||||
IndexWriter writer,
|
IndexWriter writer,
|
||||||
CountDownLatch countDownLatch1,
|
CountDownLatch countDownLatch1,
|
||||||
@ -52,4 +60,14 @@ public class ArticleBeanIndex extends BaseIndex<ArticleLucene> {
|
|||||||
writer.updateDocument(new Term("id", t.getIdArticle() + ""), doc);
|
writer.updateDocument(new Term("id", t.getIdArticle() + ""), doc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void indexDoc(ArticleLucene t) throws Exception {
|
||||||
|
indexDoc(getWriter(),t);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDoc( String id) throws IOException {
|
||||||
|
Query query = new TermQuery(new Term("id", id));
|
||||||
|
getWriter().deleteDocuments(query);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,18 @@ public abstract class BaseIndex<T> implements Runnable {
|
|||||||
/** 对象列表 */
|
/** 对象列表 */
|
||||||
private List<T> list;
|
private List<T> list;
|
||||||
|
|
||||||
|
public BaseIndex(String parentIndexPath, int subIndex) {
|
||||||
|
this.parentIndexPath = parentIndexPath;
|
||||||
|
this.subIndex = subIndex;
|
||||||
|
try {
|
||||||
|
this.writer = IndexUtil.getIndexWriter(parentIndexPath + "/index" + subIndex, true);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
this.countDownLatch1 = null;
|
||||||
|
this.countDownLatch2 = null;
|
||||||
|
}
|
||||||
|
|
||||||
public BaseIndex(
|
public BaseIndex(
|
||||||
IndexWriter writer,
|
IndexWriter writer,
|
||||||
CountDownLatch countDownLatch1,
|
CountDownLatch countDownLatch1,
|
||||||
@ -60,7 +72,7 @@ public abstract class BaseIndex<T> implements Runnable {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
this.subIndex = subIndex;
|
this.subIndex = subIndex;
|
||||||
this.countDownLatch1 = countDownLatch1;
|
this.countDownLatch1 = countDownLatch1;
|
||||||
this.countDownLatch2 = countDownLatch2;
|
this.countDownLatch2 = countDownLatch2;
|
||||||
@ -107,6 +119,12 @@ public abstract class BaseIndex<T> implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract void deleteDoc(String id) throws IOException;
|
||||||
|
|
||||||
|
public IndexWriter getWriter() {
|
||||||
|
return writer;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
|
@ -30,4 +30,14 @@ public interface ArticleLuceneMapper {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<ArticleDTO> getArticlesByIds(@Param("ids") String[] ids);
|
List<ArticleDTO> getArticlesByIds(@Param("ids") String[] ids);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载文章内容
|
||||||
|
*
|
||||||
|
* @param id 文章id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ArticleLucene getById(@Param("id") String id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,28 @@ public interface LuceneService {
|
|||||||
*
|
*
|
||||||
* @param list
|
* @param list
|
||||||
*/
|
*/
|
||||||
void writeArticle(List<ArticleLucene> list);
|
void writeArticle(List<ArticleLucene> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 写入单个文章索引
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void writeArticle(String id) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新单个文章索引
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void updateArticle(String id) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除单个文章索引
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void deleteArticle(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关键词搜索
|
* 关键词搜索
|
||||||
@ -27,20 +48,20 @@ public interface LuceneService {
|
|||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
List<ArticleLucene> searchArticle(String value);
|
List<ArticleLucene> searchArticle(String value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载所有文章内容
|
* 加载所有文章内容
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<ArticleLucene> getAllArticleLucene();
|
List<ArticleLucene> getAllArticleLucene();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载所有文章内容
|
* 加载所有文章内容
|
||||||
*
|
*
|
||||||
* @param ids 文章id(半角逗号分隔)
|
* @param ids 文章id(半角逗号分隔)
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<ArticleDTO> getArticlesByIds(String[] ids);
|
List<ArticleDTO> getArticlesByIds(String[] ids);
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,11 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
@ -44,7 +42,7 @@ public class LuceneServiceImpl implements LuceneService {
|
|||||||
@Resource private ArticleLuceneMapper luceneMapper;
|
@Resource private ArticleLuceneMapper luceneMapper;
|
||||||
|
|
||||||
/** Lucene索引文件路径 */
|
/** Lucene索引文件路径 */
|
||||||
private final String indexPath = System.getProperty("user.dir") + "/lucene/index";
|
private final String indexPath = "lucene/index";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将文章的数据解析为一个个关键字词存储到索引文件中
|
* 将文章的数据解析为一个个关键字词存储到索引文件中
|
||||||
@ -66,7 +64,7 @@ public class LuceneServiceImpl implements LuceneService {
|
|||||||
int end = Math.min((i + 1) * perThreadCount, totalCount);
|
int end = Math.min((i + 1) * perThreadCount, totalCount);
|
||||||
List<ArticleLucene> subList = list.subList(start, end);
|
List<ArticleLucene> subList = list.subList(start, end);
|
||||||
Runnable runnable =
|
Runnable runnable =
|
||||||
new ArticleBeanIndex("lucene/index", i, countDownLatch1, countDownLatch2, subList);
|
new ArticleBeanIndex(indexPath, i, countDownLatch1, countDownLatch2, subList);
|
||||||
// 子线程交给线程池管理
|
// 子线程交给线程池管理
|
||||||
pool.execute(runnable);
|
pool.execute(runnable);
|
||||||
}
|
}
|
||||||
@ -83,6 +81,31 @@ public class LuceneServiceImpl implements LuceneService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeArticle(String id) throws Exception {
|
||||||
|
writeArticle(luceneMapper.getById(id), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateArticle(String id) throws Exception {
|
||||||
|
writeArticle(luceneMapper.getById(id), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteArticle(String id) {}
|
||||||
|
|
||||||
|
private void writeArticle(ArticleLucene article, boolean create) throws Exception {
|
||||||
|
if (!create) {
|
||||||
|
int size = Objects.requireNonNull(new File(indexPath).listFiles()).length;
|
||||||
|
while (size-- >= 0) {
|
||||||
|
ArticleBeanIndex index = new ArticleBeanIndex(indexPath, size);
|
||||||
|
index.deleteDoc(article.getIdArticle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ArticleBeanIndex index = new ArticleBeanIndex(indexPath, 0x0);
|
||||||
|
index.indexDoc(article);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关键词搜索
|
* 关键词搜索
|
||||||
*
|
*
|
||||||
|
@ -61,4 +61,11 @@
|
|||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getById" resultMap="DTOResultMap">
|
||||||
|
select art.id, art.article_title, content.article_content
|
||||||
|
from forest_article art
|
||||||
|
left join forest_article_content content on art.id = content.id_article
|
||||||
|
where id = #{id};
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
Loading…
Reference in New Issue
Block a user