You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Profimedia (Jira)" <ji...@apache.org> on 2019/10/23 09:02:00 UTC
[jira] [Created] (SOLR-13861) SynonymGraphFilterFactory - with
pattern tokenizer - not able to start
Profimedia created SOLR-13861:
---------------------------------
Summary: SynonymGraphFilterFactory - with pattern tokenizer - not able to start
Key: SOLR-13861
URL: https://issues.apache.org/jira/browse/SOLR-13861
Project: Solr
Issue Type: Bug
Security Level: Public (Default Security Level. Issues are Public)
Components: search
Affects Versions: 7.7.2
Reporter: Profimedia
Hi,
we face problem with definition of SynonymGraphFilterFactory, when we use SimplePatternTokenizerFactory. It seem's that there is a problem, that Solr during processing schema, lose attribute tokenizerFactory.pattern.
{code:xml}
<fieldType name="text_synonym" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="solr.SimplePatternTokenizerFactory" pattern="[^,]+"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.SimplePatternTokenizerFactory" pattern="[^,]+"/>
<filter class="solr.SynonymGraphFilterFactory"
synonyms="synonyms.txt"
expand="false"
tokenizerFactory="solr.SimplePatternTokenizerFactory" tokenizerFactory.pattern="[^,]+" />
</analyzer>
</fieldType>
{code}
We got exception like this:
{code:java}
Caused by: java.lang.IllegalArgumentException: Configuration Error: missing parameter 'pattern'
at org.apache.lucene.analysis.util.AbstractAnalysisFactory.require(AbstractAnalysisFactory.java:97)
at org.apache.lucene.analysis.pattern.SimplePatternTokenizerFactory.<init>(SimplePatternTokenizerFactory.java:68)
... 58 more
{code}
We debug this issue and we found that problem is at this method which are called more than once:
{code:java}
// (there are no tests for this functionality)
private TokenizerFactory loadTokenizerFactory(ResourceLoader loader, String cname) throws IOException {
Class<? extends TokenizerFactory> clazz = loader.findClass(cname, TokenizerFactory.class);
try {
TokenizerFactory tokFactory = clazz.getConstructor(Map.class).newInstance(tokArgs);
if (tokFactory instanceof ResourceLoaderAware) {
((ResourceLoaderAware) tokFactory).inform(loader);
}
return tokFactory;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
{code}
In a first step argument tokArgs was cleared. And in second step, Solr reports missing param pattern.
We did some workaround like this:
{code:java}
TokenizerFactory tokFactory = clazz.getConstructor(Map.class).newInstance(new HashMap<>(tokArgs))
{code}
, which creates for each call new map from tokArgs, which could be cleared. But I think, that for this issue will exist better solution, then creating copy of tokArgs map.
After that we can run filter, mentioned above, without problems.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org