You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by manisha_5 <pu...@gmail.com> on 2009/05/04 18:39:56 UTC

Solr autocompletion in rails

Hi,

I am new to solr. I am using solr server to index the data and make search
in a Ruby on rails project.I want to add autocompletion feature. I tried
with the xml patch in the schema.xml file of solr, but dont know how to test
if the feature is working.also havent been able to integrate the same in the
Rails project that is using Solr.Can anyone please provide some help in this
regards??

the patch of codes in Schema.xml is :

 <fieldType name="autocomplete" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3"
maxGramSize="15" /> 
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.PatternReplaceFilterFactory"
pattern="([^a-z0-9])" replacement="" replace="all" />
            <filter class="solr.EdgeNGramFilterFactory" maxGramSize="100"
minGramSize="1" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.PatternReplaceFilterFactory"
pattern="([^a-z0-9])" replacement="" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory"
pattern="^(.{20})(.*)?" replacement="$1" replace="all" />
        </analyzer>
   </fieldType>

-- 
View this message in context: http://www.nabble.com/Solr-autocompletion-in-rails-tp23372020p23372020.html
Sent from the Solr - User mailing list archive at Nabble.com.


Re: Solr autocompletion in rails

Posted by Matt Weber <ma...@mattweber.org>.
First, your solrconfig.xml should have the something similar to the  
following:

   <searchComponent name="termsComp"  
class="org.apache.solr.handler.component.TermsComponent"/>

   <requestHandler name="/autoSuggest"  
class="org.apache.solr.handler.component.SearchHandler">
     <arr name="components">
       <str>termsComp</str>
     </arr>
   </requestHandler>

This will give you a request handler called "/autoSuggest" that you  
will use for suggestions.

Then you need to write some rails code to access this.  I am not very  
familiar with ruby, but I believe you might want to try http://wiki.apache.org/solr/solr-ruby 
.  Make sure you set your query type to "/autoSuggest".  If that won't  
work for you, then just use the standard http libraries to access the  
autoSuggest url directly and get json output.

With any of these methods make sure you set the following parameters:

terms=true
terms.fl=source_field
terms.lower=input_term
terms.prefix=input_term
terms.lower.incl=false

For direct access to the json output you will  want these as well:

indent=true
wt=json

The terms.fl parameter specifys the field(s) you want to use as the  
source for suggestions.  Make sure this field has very little  
processing done on it, maybe lowercasing and tokenization only.

Here is an example url that should give you some output once things  
are working:

http://localhost:8983/solr/autoSuggest?terms=true&terms.fl=spell&terms.lower=t&terms.prefix=t&terms.lower.incl=false&indent=true&wt=json

The next thing is to parse the json output and do whatever you want  
with the results.  In my example, I just printed out each suggestion  
on a single line of the response because this is what the jQuery  
autocomplete plugin wanted.  The easiest way to parse the json output  
is to use the json ruby library, http://json.rubyforge.org/.

After you have your rails controller working you can hook it into your  
FE with some javascript like I did in the example on my blog.  Hope  
this helps.

Thanks,

Matt Weber
eSr Technologies
http://www.esr-technologies.com




On May 7, 2009, at 7:37 AM, manisha_5 wrote:

>
> Thanks a lot for the information. But I am still a bit confused  
> about the use
> of TermsComponents. Like where are we exactly going to put these  
> codes in
> Solr.For example I changed schema.xml to add autocomplete feauture.I  
> read
> your blog too, its very helpful.But still a little confused. :-((
> Can you explain it a bit?
>
>
>
> Matt Weber-2 wrote:
>>
>> You will probably want to use the new TermsComponent in Solr 1.4.   
>> See
>> http://wiki.apache.org/solr/TermsComponent
>> .  I just recently wrote a blog post about using autocompletion with
>> TermsComponent, a servlet, and jQuery.  You can probably follow these
>> instructions, but instead of writing a servlet you can write a rails
>> handler parsing the json output directly.
>>
>> http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/
>> .
>>
>> Thanks,
>>
>> Matt Weber
>>
>>
>>
>> On May 4, 2009, at 9:39 AM, manisha_5 wrote:
>>
>>>
>>> Hi,
>>>
>>> I am new to solr. I am using solr server to index the data and make
>>> search
>>> in a Ruby on rails project.I want to add autocompletion feature. I
>>> tried
>>> with the xml patch in the schema.xml file of solr, but dont know how
>>> to test
>>> if the feature is working.also havent been able to integrate the
>>> same in the
>>> Rails project that is using Solr.Can anyone please provide some help
>>> in this
>>> regards??
>>>
>>> the patch of codes in Schema.xml is :
>>>
>>> <fieldType name="autocomplete" class="solr.TextField">
>>>       <analyzer type="index">
>>>           <tokenizer class="solr.NGramTokenizerFactory"
>>> minGramSize="3"
>>> maxGramSize="15" />
>>>           <filter class="solr.LowerCaseFilterFactory" />
>>>           <filter class="solr.PatternReplaceFilterFactory"
>>> pattern="([^a-z0-9])" replacement="" replace="all" />
>>>           <filter class="solr.EdgeNGramFilterFactory"
>>> maxGramSize="100"
>>> minGramSize="1" />
>>>       </analyzer>
>>>       <analyzer type="query">
>>>           <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>>           <filter class="solr.LowerCaseFilterFactory" />
>>>           <filter class="solr.PatternReplaceFilterFactory"
>>> pattern="([^a-z0-9])" replacement="" replace="all" />
>>>           <filter class="solr.PatternReplaceFilterFactory"
>>> pattern="^(.{20})(.*)?" replacement="$1" replace="all" />
>>>       </analyzer>
>>>  </fieldType>
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Solr-autocompletion-in-rails-tp23372020p23372020.html
>>> Sent from the Solr - User mailing list archive at Nabble.com.
>>>
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Solr-autocompletion-in-rails-tp23372020p23428267.html
> Sent from the Solr - User mailing list archive at Nabble.com.
>


Re: Solr autocompletion in rails

Posted by manisha_5 <pu...@gmail.com>.
Thanks a lot for the information. But I am still a bit confused about the use
of TermsComponents. Like where are we exactly going to put these codes in
Solr.For example I changed schema.xml to add autocomplete feauture.I read
your blog too, its very helpful.But still a little confused. :-((
Can you explain it a bit?



Matt Weber-2 wrote:
> 
> You will probably want to use the new TermsComponent in Solr 1.4.  See
> http://wiki.apache.org/solr/TermsComponent 
> .  I just recently wrote a blog post about using autocompletion with  
> TermsComponent, a servlet, and jQuery.  You can probably follow these  
> instructions, but instead of writing a servlet you can write a rails  
> handler parsing the json output directly.
> 
> http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/ 
> .
> 
> Thanks,
> 
> Matt Weber
> 
> 
> 
> On May 4, 2009, at 9:39 AM, manisha_5 wrote:
> 
>>
>> Hi,
>>
>> I am new to solr. I am using solr server to index the data and make  
>> search
>> in a Ruby on rails project.I want to add autocompletion feature. I  
>> tried
>> with the xml patch in the schema.xml file of solr, but dont know how  
>> to test
>> if the feature is working.also havent been able to integrate the  
>> same in the
>> Rails project that is using Solr.Can anyone please provide some help  
>> in this
>> regards??
>>
>> the patch of codes in Schema.xml is :
>>
>> <fieldType name="autocomplete" class="solr.TextField">
>>        <analyzer type="index">
>>            <tokenizer class="solr.NGramTokenizerFactory"  
>> minGramSize="3"
>> maxGramSize="15" />
>>            <filter class="solr.LowerCaseFilterFactory" />
>>            <filter class="solr.PatternReplaceFilterFactory"
>> pattern="([^a-z0-9])" replacement="" replace="all" />
>>            <filter class="solr.EdgeNGramFilterFactory"  
>> maxGramSize="100"
>> minGramSize="1" />
>>        </analyzer>
>>        <analyzer type="query">
>>            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>>            <filter class="solr.LowerCaseFilterFactory" />
>>            <filter class="solr.PatternReplaceFilterFactory"
>> pattern="([^a-z0-9])" replacement="" replace="all" />
>>            <filter class="solr.PatternReplaceFilterFactory"
>> pattern="^(.{20})(.*)?" replacement="$1" replace="all" />
>>        </analyzer>
>>   </fieldType>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Solr-autocompletion-in-rails-tp23372020p23372020.html
>> Sent from the Solr - User mailing list archive at Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Solr-autocompletion-in-rails-tp23372020p23428267.html
Sent from the Solr - User mailing list archive at Nabble.com.


Re: Solr autocompletion in rails

Posted by Matt Weber <ma...@mattweber.org>.
You will probably want to use the new TermsComponent in Solr 1.4.  See http://wiki.apache.org/solr/TermsComponent 
.  I just recently wrote a blog post about using autocompletion with  
TermsComponent, a servlet, and jQuery.  You can probably follow these  
instructions, but instead of writing a servlet you can write a rails  
handler parsing the json output directly.

http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/ 
.

Thanks,

Matt Weber



On May 4, 2009, at 9:39 AM, manisha_5 wrote:

>
> Hi,
>
> I am new to solr. I am using solr server to index the data and make  
> search
> in a Ruby on rails project.I want to add autocompletion feature. I  
> tried
> with the xml patch in the schema.xml file of solr, but dont know how  
> to test
> if the feature is working.also havent been able to integrate the  
> same in the
> Rails project that is using Solr.Can anyone please provide some help  
> in this
> regards??
>
> the patch of codes in Schema.xml is :
>
> <fieldType name="autocomplete" class="solr.TextField">
>        <analyzer type="index">
>            <tokenizer class="solr.NGramTokenizerFactory"  
> minGramSize="3"
> maxGramSize="15" />
>            <filter class="solr.LowerCaseFilterFactory" />
>            <filter class="solr.PatternReplaceFilterFactory"
> pattern="([^a-z0-9])" replacement="" replace="all" />
>            <filter class="solr.EdgeNGramFilterFactory"  
> maxGramSize="100"
> minGramSize="1" />
>        </analyzer>
>        <analyzer type="query">
>            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
>            <filter class="solr.LowerCaseFilterFactory" />
>            <filter class="solr.PatternReplaceFilterFactory"
> pattern="([^a-z0-9])" replacement="" replace="all" />
>            <filter class="solr.PatternReplaceFilterFactory"
> pattern="^(.{20})(.*)?" replacement="$1" replace="all" />
>        </analyzer>
>   </fieldType>
>
> -- 
> View this message in context: http://www.nabble.com/Solr-autocompletion-in-rails-tp23372020p23372020.html
> Sent from the Solr - User mailing list archive at Nabble.com.
>