Case insensitive query for fetching facets

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Case insensitive query for fetching facets

Ritesh Kumar-2
Hello team,

I am trying to prepare facet on a field of type string. The facet data will
be shown according to the user's query on this very field.

<field name="fieldName" type="string" indexed="true" stored="true"
required="false" multiValued="false"/>


As this field is of type string, it works fine with case sensitive query. I
want to be able to query on this field irrespective of the case.

I tried changing the field type to string_ci as defined below

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true"
omitNorms="true">
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

<field name="fieldName" type="string_ci" indexed="true" stored="true"
required="false" multiValued="false"/>

Now, in this case, I am able to perform a case-insensitive query but the
facet values are being shown in lowercase.

I want to be able to perform a case-insensitive query on this field but
show the original data.
Is there anything I can do achieve this.

Best,

--
Ritesh Kumar
Reply | Threaded
Open this post in threaded view
|

Re: Case insensitive query for fetching facets

Mikhail Khludnev-2
Hello, Ritesh.

It's obviously done with copyField.

On Thu, Dec 6, 2018 at 4:26 PM Ritesh Kumar <[hidden email]>
wrote:

> Hello team,
>
> I am trying to prepare facet on a field of type string. The facet data will
> be shown according to the user's query on this very field.
>
> <field name="fieldName" type="string" indexed="true" stored="true"
> required="false" multiValued="false"/>
>
>
> As this field is of type string, it works fine with case sensitive query. I
> want to be able to query on this field irrespective of the case.
>
> I tried changing the field type to string_ci as defined below
>
> <fieldType name="string_ci" class="solr.TextField" sortMissingLast="true"
> omitNorms="true">
>     <analyzer type="query">
>         <tokenizer class="solr.KeywordTokenizerFactory"/>
>         <filter class="solr.LowerCaseFilterFactory"/>
>     </analyzer>
> </fieldType>
>
> <field name="fieldName" type="string_ci" indexed="true" stored="true"
> required="false" multiValued="false"/>
>
> Now, in this case, I am able to perform a case-insensitive query but the
> facet values are being shown in lowercase.
>
> I want to be able to perform a case-insensitive query on this field but
> show the original data.
> Is there anything I can do achieve this.
>
> Best,
>
> --
> Ritesh Kumar
>


--
Sincerely yours
Mikhail Khludnev
Reply | Threaded
Open this post in threaded view
|

Re: Case insensitive query for fetching facets

Ritesh Kumar-2
Yes, it can be used.
But, what if I have other such facets on different other fields. Use of
copyField will require me to create a dedicated copy field for each such
facet.

I want to know if there is any other option where I do not have to add
multiple copy fields.

On Thu, Dec 6, 2018 at 7:06 PM Mikhail Khludnev <[hidden email]> wrote:

> Hello, Ritesh.
>
> It's obviously done with copyField.
>
> On Thu, Dec 6, 2018 at 4:26 PM Ritesh Kumar <
> [hidden email]>
> wrote:
>
> > Hello team,
> >
> > I am trying to prepare facet on a field of type string. The facet data
> will
> > be shown according to the user's query on this very field.
> >
> > <field name="fieldName" type="string" indexed="true" stored="true"
> > required="false" multiValued="false"/>
> >
> >
> > As this field is of type string, it works fine with case sensitive
> query. I
> > want to be able to query on this field irrespective of the case.
> >
> > I tried changing the field type to string_ci as defined below
> >
> > <fieldType name="string_ci" class="solr.TextField" sortMissingLast="true"
> > omitNorms="true">
> >     <analyzer type="query">
> >         <tokenizer class="solr.KeywordTokenizerFactory"/>
> >         <filter class="solr.LowerCaseFilterFactory"/>
> >     </analyzer>
> > </fieldType>
> >
> > <field name="fieldName" type="string_ci" indexed="true" stored="true"
> > required="false" multiValued="false"/>
> >
> > Now, in this case, I am able to perform a case-insensitive query but the
> > facet values are being shown in lowercase.
> >
> > I want to be able to perform a case-insensitive query on this field but
> > show the original data.
> > Is there anything I can do achieve this.
> >
> > Best,
> >
> > --
> > Ritesh Kumar
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
>
Reply | Threaded
Open this post in threaded view
|

Re: Case insensitive query for fetching facets

Mikhail Khludnev-2
Fields need to be copied. You can shorten the schema with using wildcards
*.

On Fri, Dec 7, 2018 at 9:03 AM Ritesh Kumar <[hidden email]>
wrote:

> Yes, it can be used.
> But, what if I have other such facets on different other fields. Use of
> copyField will require me to create a dedicated copy field for each such
> facet.
>
> I want to know if there is any other option where I do not have to add
> multiple copy fields.
>
> On Thu, Dec 6, 2018 at 7:06 PM Mikhail Khludnev <[hidden email]> wrote:
>
> > Hello, Ritesh.
> >
> > It's obviously done with copyField.
> >
> > On Thu, Dec 6, 2018 at 4:26 PM Ritesh Kumar <
> > [hidden email]>
> > wrote:
> >
> > > Hello team,
> > >
> > > I am trying to prepare facet on a field of type string. The facet data
> > will
> > > be shown according to the user's query on this very field.
> > >
> > > <field name="fieldName" type="string" indexed="true" stored="true"
> > > required="false" multiValued="false"/>
> > >
> > >
> > > As this field is of type string, it works fine with case sensitive
> > query. I
> > > want to be able to query on this field irrespective of the case.
> > >
> > > I tried changing the field type to string_ci as defined below
> > >
> > > <fieldType name="string_ci" class="solr.TextField"
> sortMissingLast="true"
> > > omitNorms="true">
> > >     <analyzer type="query">
> > >         <tokenizer class="solr.KeywordTokenizerFactory"/>
> > >         <filter class="solr.LowerCaseFilterFactory"/>
> > >     </analyzer>
> > > </fieldType>
> > >
> > > <field name="fieldName" type="string_ci" indexed="true" stored="true"
> > > required="false" multiValued="false"/>
> > >
> > > Now, in this case, I am able to perform a case-insensitive query but
> the
> > > facet values are being shown in lowercase.
> > >
> > > I want to be able to perform a case-insensitive query on this field but
> > > show the original data.
> > > Is there anything I can do achieve this.
> > >
> > > Best,
> > >
> > > --
> > > Ritesh Kumar
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> >
>


--
Sincerely yours
Mikhail Khludnev
Reply | Threaded
Open this post in threaded view
|

Re: Case insensitive query for fetching facets

David Hastings
In reply to this post by Ritesh Kumar-2
you could change your indexer to index the values to a dynamic field *_ci
for each of the facets.
ie, your facet is organization.  index to the string field, and also index
it to the dynamic organization_ci field
but there will not be a short cut way of doing this in the schema itself


On Fri, Dec 7, 2018 at 1:03 AM Ritesh Kumar <[hidden email]>
wrote:

> Yes, it can be used.
> But, what if I have other such facets on different other fields. Use of
> copyField will require me to create a dedicated copy field for each such
> facet.
>
> I want to know if there is any other option where I do not have to add
> multiple copy fields.
>
> On Thu, Dec 6, 2018 at 7:06 PM Mikhail Khludnev <[hidden email]> wrote:
>
> > Hello, Ritesh.
> >
> > It's obviously done with copyField.
> >
> > On Thu, Dec 6, 2018 at 4:26 PM Ritesh Kumar <
> > [hidden email]>
> > wrote:
> >
> > > Hello team,
> > >
> > > I am trying to prepare facet on a field of type string. The facet data
> > will
> > > be shown according to the user's query on this very field.
> > >
> > > <field name="fieldName" type="string" indexed="true" stored="true"
> > > required="false" multiValued="false"/>
> > >
> > >
> > > As this field is of type string, it works fine with case sensitive
> > query. I
> > > want to be able to query on this field irrespective of the case.
> > >
> > > I tried changing the field type to string_ci as defined below
> > >
> > > <fieldType name="string_ci" class="solr.TextField"
> sortMissingLast="true"
> > > omitNorms="true">
> > >     <analyzer type="query">
> > >         <tokenizer class="solr.KeywordTokenizerFactory"/>
> > >         <filter class="solr.LowerCaseFilterFactory"/>
> > >     </analyzer>
> > > </fieldType>
> > >
> > > <field name="fieldName" type="string_ci" indexed="true" stored="true"
> > > required="false" multiValued="false"/>
> > >
> > > Now, in this case, I am able to perform a case-insensitive query but
> the
> > > facet values are being shown in lowercase.
> > >
> > > I want to be able to perform a case-insensitive query on this field but
> > > show the original data.
> > > Is there anything I can do achieve this.
> > >
> > > Best,
> > >
> > > --
> > > Ritesh Kumar
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: Case insensitive query for fetching facets

Alexandre Rafalovitch
In reply to this post by Ritesh Kumar-2
If you are on the latest Solr (7.3+), try switching from TextField to
SortableTextField in your string_ci definition above.

That type implicitly uses docValues and should return original text
for faceting purposes, while still allowing analyzers.

Regards,
   Alex.
On Thu, 6 Dec 2018 at 08:26, Ritesh Kumar
<[hidden email]> wrote:

>
> Hello team,
>
> I am trying to prepare facet on a field of type string. The facet data will
> be shown according to the user's query on this very field.
>
> <field name="fieldName" type="string" indexed="true" stored="true"
> required="false" multiValued="false"/>
>
>
> As this field is of type string, it works fine with case sensitive query. I
> want to be able to query on this field irrespective of the case.
>
> I tried changing the field type to string_ci as defined below
>
> <fieldType name="string_ci" class="solr.TextField" sortMissingLast="true"
> omitNorms="true">
>     <analyzer type="query">
>         <tokenizer class="solr.KeywordTokenizerFactory"/>
>         <filter class="solr.LowerCaseFilterFactory"/>
>     </analyzer>
> </fieldType>
>
> <field name="fieldName" type="string_ci" indexed="true" stored="true"
> required="false" multiValued="false"/>
>
> Now, in this case, I am able to perform a case-insensitive query but the
> facet values are being shown in lowercase.
>
> I want to be able to perform a case-insensitive query on this field but
> show the original data.
> Is there anything I can do achieve this.
>
> Best,
>
> --
> Ritesh Kumar