fix additional word

This commit is contained in:
y_fujita 2015-11-17 15:23:27 +09:00
parent 3652a80d43
commit 25286aadfe
2 changed files with 54 additions and 54 deletions

View file

@ -39,6 +39,7 @@ import org.codelibs.fess.app.web.CrudMode;
import org.codelibs.fess.app.web.base.FessAdminAction;
import org.codelibs.fess.es.config.exentity.SuggestElevateWord;
import org.codelibs.fess.exception.FessSystemException;
import org.codelibs.fess.helper.SuggestHelper;
import org.codelibs.fess.helper.SystemHelper;
import org.dbflute.optional.OptionalEntity;
import org.dbflute.optional.OptionalThing;
@ -66,6 +67,8 @@ public class AdminElevatewordAction extends FessAdminAction {
private SystemHelper systemHelper;
@Resource
protected DynamicProperties crawlerProperties;
@Resource
protected SuggestHelper suggestHelper;
// ===================================================================================
// Hook
@ -223,10 +226,13 @@ public class AdminElevatewordAction extends FessAdminAction {
public HtmlResponse create(final CreateForm form) {
verifyCrudMode(form.crudMode, CrudMode.CREATE);
validate(form, messages -> {}, toEditHtml());
getSuggestElevateWord(form).ifPresent(entity -> {
suggestElevateWordService.store(entity);
saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
}).orElse(() -> {
getSuggestElevateWord(form).ifPresent(
entity -> {
suggestElevateWordService.store(entity);
suggestHelper.addElevateWord(entity.getSuggestWord(), entity.getReading(), entity.getTargetLabel(),
entity.getTargetRole(), entity.getBoost());
saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL), toEditHtml());
});
return redirect(getClass());
@ -238,6 +244,8 @@ public class AdminElevatewordAction extends FessAdminAction {
validate(form, messages -> {}, toEditHtml());
getSuggestElevateWord(form).ifPresent(entity -> {
suggestElevateWordService.store(entity);
suggestHelper.deleteAllElevateWord();
suggestHelper.storeAllElevateWords();
saveInfo(messages -> messages.addSuccessCrudUpdateCrudTable(GLOBAL));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.id), toEditHtml());
@ -252,6 +260,7 @@ public class AdminElevatewordAction extends FessAdminAction {
final String id = form.id;
suggestElevateWordService.getSuggestElevateWord(id).ifPresent(entity -> {
suggestElevateWordService.delete(entity);
suggestHelper.deleteElevateWord(entity.getSuggestWord());
saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
}).orElse(() -> {
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), toEditHtml());

View file

@ -17,10 +17,7 @@ package org.codelibs.fess.helper;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
@ -32,11 +29,13 @@ import org.codelibs.fess.es.client.FessEsClient;
import org.codelibs.fess.es.config.exbhv.SuggestBadWordBhv;
import org.codelibs.fess.es.config.exbhv.SuggestElevateWordBhv;
import org.codelibs.fess.es.config.exentity.SuggestBadWord;
import org.codelibs.fess.es.config.exentity.SuggestElevateWord;
import org.codelibs.fess.es.log.exentity.SearchFieldLog;
import org.codelibs.fess.es.log.exentity.SearchLog;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.suggest.Suggester;
import org.codelibs.fess.suggest.constants.FieldNames;
import org.codelibs.fess.suggest.entity.ElevateWord;
import org.codelibs.fess.suggest.entity.SuggestItem;
import org.codelibs.fess.suggest.index.contents.document.DocumentReader;
import org.codelibs.fess.suggest.index.contents.document.ESSourceReader;
@ -66,7 +65,7 @@ public class SuggestHelper {
public String[] roleFieldNames = { "role" };
public String[] contentsIndex = { "content", "title" };
public String[] contentsIndexFieldNames = { "content", "title" };
private static final String TEXT_SEP = " ";
@ -81,7 +80,7 @@ public class SuggestHelper {
fessEsClient.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet();
suggester = Suggester.builder().build(fessEsClient, fessConfig.getIndexDocumentIndex());
suggester.settings().array().delete(SuggestSettings.DefaultKeys.SUPPORTED_FIELDS);
for (final String field : contentsIndex) {
for (final String field : contentsIndexFieldNames) {
suggester.settings().array().add(SuggestSettings.DefaultKeys.SUPPORTED_FIELDS, field);
}
suggester.createIndexIfNothing();
@ -167,40 +166,44 @@ public class SuggestHelper {
}
public void storeAllElevateWords() {
// TODO
// suggestService.deleteAllElevateWords();
//
// final List<SuggestElevateWord> list = suggestElevateWordBhv.selectList(cb -> {
// cb.query().setDeletedBy_IsNull();
// });
// for (final SuggestElevateWord suggestElevateWord : list) {
// final String word = suggestElevateWord.getSuggestWord();
// final String reading = suggestElevateWord.getReading();
// final String labelStr = suggestElevateWord.getTargetLabel();
// final String roleStr = suggestElevateWord.getTargetRole();
// final long boost = suggestElevateWord.getBoost().longValue();
//
// addElevateWord(word, reading, labelStr, roleStr, boost, false);
// }
// suggestService.commit();
}
deleteAllBadWords();
public void addElevateWord(final String word, final String reading, final String labels, final String roles, final long boost) {
addElevateWord(word, reading, labels, roles, boost, true);
}
public void addElevateWord(final String word, final String reading, final String labels, final String roles, final long boost,
final boolean commit) {
final List<SuggestBadWord> badWordList = suggestBadWordBhv.selectList(badWordCB -> {
badWordCB.query().setSuggestWord_Equal(word);
final List<SuggestElevateWord> list = suggestElevateWordBhv.selectList(cb -> {
cb.query().matchAll();
});
if (badWordList.size() > 0) {
return;
}
for (final SuggestElevateWord elevateWord : list) {
addElevateWord(elevateWord.getSuggestWord(), elevateWord.getReading(), elevateWord.getTargetLabel(),
elevateWord.getTargetRole(), elevateWord.getBoost(), false);
}
suggester.refresh();
}
public void deleteAllElevateWord() {
final List<SuggestElevateWord> list = suggestElevateWordBhv.selectList(cb -> {
cb.query().matchAll();
});
for (final SuggestElevateWord elevateWord : list) {
suggester.indexer().deleteElevateWord(elevateWord.getSuggestWord());
}
suggester.refresh();
}
public void deleteElevateWord(final String word) {
suggester.indexer().deleteElevateWord(word);
suggester.refresh();
}
public void addElevateWord(final String word, final String reading, final String tags, final String roles, final float boost) {
addElevateWord(word, reading, tags, roles, boost, true);
}
public void addElevateWord(final String word, final String reading, final String tags, final String roles, final float boost,
final boolean commit) {
final List<String> labelList = new ArrayList<String>();
if (StringUtil.isNotBlank(labels)) {
final String[] array = labels.trim().split(",");
if (StringUtil.isNotBlank(tags)) {
final String[] array = tags.trim().split(",");
for (final String label : array) {
labelList.add(label);
}
@ -213,23 +216,11 @@ public class SuggestHelper {
}
}
// TODO
// suggestService.addElevateWord(word, reading, labelList, roleList, boost);
//
// if (commit) {
// suggestService.commit();
// }
suggester.indexer().addElevateWord(
new ElevateWord(word, boost, Collections.singletonList(reading), Arrays.asList(contentFieldNames), labelList, roleList));
}
public void deleteAllBadWords() {
final List<SuggestBadWord> list = suggestBadWordBhv.selectList(cb -> {
cb.query().matchAll();
});
final Set<String> badWords = new HashSet<>();
for (final SuggestBadWord suggestBadWord : list) {
final String word = suggestBadWord.getSuggestWord();
badWords.add(word);
}
suggester.settings().badword().deleteAll();
}