Это добавит только поиск:
Lookup l = new Lookup("glossary.lst", "major", "minor", "en", "AnnotType");
l.features = new HashMap<>();
l.features.put("someFeatureName", "some value");
gazetter.add("string to be found", l);
Это обновит линейное определение (файлы .def
и .lst
):
LinearDefinition ld = gazetter.getLinearDefinition();
//add .lst record
LinearNode ln = new LinearNode("glossary.lst", "minor", "major", "en", "AnnotType");
ld.add(ln);
//add Lookup record
Map<String, Object> features = new HashMap<>();
features.put("someFeatureName", "some value");
GazetteerNode gn = new GazetteerNode("string to be found", features);
gn.setSeparator("@");
GazetteerList theList = ld.getListsByNode().get(ln);
theList.add(gn);
//save updated files
theList.store();
ld.store();
//optionally re-init the gazetteer to make changes to work
gazetter.reInit();
Если конфигурация вашего географического справочника непротиворечива (в основном разделитель), то
theList.store(); ld.store(); gazetter.reInit();
загрузит обновленную конфигурацию. Вам не обязательно комбинировать второй подход с первым. Но поскольку операции store()
и reInit()
очень затратны по сравнению с добавлением поиска, я не рекомендую вызывать их часто. Я бы предпочел какую-то комбинацию (как вы упомянули в комментариях) или выполнить только добавление поиска, если вам не нужны файлы .def
и .lst
(возможно, вы уже как-то/где-то сохраняете свои поиски ).
Удаление поисковых запросов
Поиск только:
//This will remove all Lookups for given string
gazetteer.remove("string to be found");
//This will remove a specific Lookup only
//The method is not included in the Gazetteer interface
((DefaultGazetteer) gazetter).removeLookup("string to be found", l);
только линейное определение:
theList.remove(gn);
person
dedek
schedule
01.06.2015