On 8/3/2018 1:10 AM, Nitesh Kumar wrote:
As I discussed above,  in some special case, we have a situation where
these fields ( field1, field2  etc..) value can be in *CJK *pattern. That
means  field1, field2 store plain *English *text or *CJK *text. Hence, in
case of choosing *StandardTokenizer, *while indexing/query it works fine
when it has to deal with plain *English text*, whereas in the case of *CJK
text *it doesn't work appropriately.

We have one index where fields can contain both English and CJK.  The customer is in Japan.  I designed it to work properly with all CJK characters, not just Japanese.

This is the fieldType I came up with after a LOT of research.  Most of the information that was useful came from a series of blog posts:

https://apaste.info/Vfwf

I used a paste website because line wrapping within an email would have made it difficult to copy.  The paste expires in one month.

This analysis chain uses the ICU classes that are included as a contrib module with Solr, as well as one custom jar:

https://github.com/sul-dlss/CJKFoldingFilter/blob/master/src/edu/stanford/lucene/analysis/CJKFoldingFilterFactory.java

The blog posts I used to create my schema can be found here:

http://discovery-grindstone.blogspot.com/2014/

Some people might find the ICUFoldingFilterFactory too aggressive.  If so, replace it with ASCIIFoldingFilterFactory and ICUNormalizer2FilterFactory.  This is what we're actually using -- the customer didn't want the kinds of matches that the ICU class allowed.

Using edismax with an unusual value for the "mm" parameter might solve some of your other issues.  This is discussed in parts 8 and 12 of the blog series.

I have one note for you about your analysis chain.  I notice you have a filter listed before the tokenizer.  Solr will always apply the tokenizer first -- the ASCIIFoldingFilterFactory that you have listed first is in fact being run second.  Solr will always run CharFilter entries first, then the tokenizer, then Filter entries.

Thanks,
Shawn

Reply via email to