Can you also post your mapping where you defined the similarity?

-- 
Ivan


On Mon, Mar 31, 2014 at 10:36 AM, geantbrun <agin.patr...@gmail.com> wrote:

> I realize that I probably have to define the similarity property of my
> field as "my_similarity" (and not as "tfCappedSimilarity") and define in
> the settings my_similarity as being of type tfCappedSimilarity.
> When I do that, I get the following error at the index/mapping creation:
>
> {"error":"IndexCreationException[[exbd] failed to create index]; nested:
> NoClassSettingsException[Failed to load class setting [type] with value
> [tfCappedSimilarity]]; nested:
> ClassNotFoundException[org.elasticsearch.index.similarity.tfcappedsimilarity.tfCappedSimilaritySimilarityProvider];
> ","status":500}]
>
> Note that the provider is referred in the error as 
> tfCappedSimilaritySimilarityProvider
> (similarity repeated 2 times). Is it normal?
> Patrick
>
> Le lundi 31 mars 2014 13:06:00 UTC-4, geantbrun a écrit :
>
>> Hi Ivan,
>> I followed your instructions but it does not seem to work, I must be
>> wrong somewhere. I created the jar file from the following two java files,
>> could you tell me if they are ok?
>>
>> tfCappedSimilarity.java
>> ***************************
>> package org.elasticsearch.index.similarity;
>>
>> import org.apache.lucene.search.similarities.DefaultSimilarity;
>> import org.elasticsearch.common.logging.ESLogger;
>> import org.elasticsearch.common.logging.Loggers;
>>
>> public class tfCappedSimilarity extends DefaultSimilarity {
>>
>>         private ESLogger logger;
>>
>>         public tfCappedSimilarity() {
>>                 logger = Loggers.getLogger(getClass());
>>         }
>>
>>         /**
>>          * Capped tf value
>>          */
>>         @Override
>>         public float tf(float freq) {
>>                 return (float)Math.sqrt(Math.min(9, freq));
>>         }
>> }
>>
>> tfCappedSimilarityProvider.java
>> *************************************
>> package org.elasticsearch.index.similarity;
>>
>> import org.elasticsearch.common.inject.Inject;
>> import org.elasticsearch.common.inject.assistedinject.Assisted;
>> import org.elasticsearch.common.settings.Settings;
>>
>> public class tfCappedSimilarityProvider extends
>> AbstractSimilarityProvider {
>>
>>         private tfCappedSimilarity similarity;
>>
>>         @Inject
>>         public tfCappedSimilarityProvider(@Assisted String name,
>> @Assisted Settings settings) {
>>                 super(name);
>>                 this.similarity = new tfCappedSimilarity();
>>         }
>>
>>         /**
>>          * {@inheritDoc}
>>          */
>>         @Override
>>         public tfCappedSimilarity get() {
>>                 return similarity;
>>         }
>> }
>>
>>
>> In my mapping, I define the similarity property of my field as
>> tfCappedSimilarity, is it ok?
>>
>> What makes me say that it does not work: I insert a doc with a word
>> repeated 16 times in my field. When I do a search with that word, the
>> result shows a tf of 4 (square root of 16) and not 3 as I was expecting, Is
>> there a way to know if the similarity was loaded or not (maybe in a log
>> file?).
>>
>> Cheers,
>> Patrick
>>
>> Le mercredi 26 mars 2014 17:16:36 UTC-4, Ivan Brusic a écrit :
>>>
>>> I updated my gist to illustrate the SimilarityProvider that goes along
>>> with it. Similarities are easier to add to Elasticsearch than most plugins.
>>> You just need to compile the two files into a jar and then add that jar
>>> into Elasticsearch's classpath ($ES_HOME/lib most likely). The code will
>>> scan for every SimilarityProvider defined and load it.
>>>
>>> You then mapping the similarity to a field: http://www.
>>> elasticsearch.org/guide/en/elasticsearch/reference/
>>> current/mapping-core-types.html#_configuring_similarity_per_field
>>>
>>> Note that you cannot change the similarity of a field dynamically.
>>>
>>> Ivan
>>>
>>>
>>> http://www.elasticsearch.org/guide/en/elasticsearch/
>>> reference/current/mapping-core-types.html#_configuring_
>>> similarity_per_field
>>>
>>>
>>> On Wed, Mar 26, 2014 at 12:49 PM, geantbrun <agin.p...@gmail.com> wrote:
>>>
>>>> Britta is looping over words that are passed as parameters. It's easy
>>>> to implement her script for a simple query but what about boolean querys?
>>>> In my understanding (but I could be wrong of course), I would have to parse
>>>> the query to call the script with each sub-clause, am I wrong?
>>>>
>>>> I prefer your custom similarity alternative. Again, sorry for the silly
>>>> question (newbie!) but where do you put your java file? Is it the only
>>>> thing that is needed (except for the modification in the mapping)?
>>>> cheers,
>>>> Patrick
>>>>
>>>> Le mercredi 26 mars 2014 11:58:52 UTC-4, Ivan Brusic a écrit :
>>>>>
>>>>> I am still on a version of Elasticsearch that does not have access to
>>>>> the new scoring capabilities, so I cannot test out any scripts. The non
>>>>> normalized term frequency should be the line:
>>>>> tf = _index[field][word].tf()
>>>>>
>>>>> If that is the case, you could substitute that line with something
>>>>> like:
>>>>> tf = Math.min(10, _index[field][word].tf())
>>>>>
>>>>> As a stated before, I am used to using Similarities, so I find the
>>>>> example easier. Here is a custom similarity that I used in Elasticsearch
>>>>> (removes any norms that are indexed):
>>>>> https://gist.github.com/brusic/9786587
>>>>>
>>>>> The second part would be the tf() method you would need to implement
>>>>> instead of decodeNormValue I used.
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Ivan
>>>>>
>>>>
>>>  --
> You received this message because you are subscribed to the Google Groups
> "elasticsearch" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elasticsearch+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elasticsearch/6370b4dc-8243-4aea-918a-e4e4e9588aaf%40googlegroups.com<https://groups.google.com/d/msgid/elasticsearch/6370b4dc-8243-4aea-918a-e4e4e9588aaf%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elasticsearch+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/CALY%3DcQCMigowr_z-Dko_LP05h%3DXtFTV-czmv_n%2Be%2B%2B7md48%3DtA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to