Hi Andy,

Loads of thanks for your reply. I am trying to figure out my problem by
following your advice.

I have installed Solr (8.5) on my computer and added 4 documents into
a core.

In the 4 documents, staffName_txt field has been set to "Lindmar Deborah",
"Mr Kenyon John", " Saab Jerry" and "Gross Bob" respectively.



At the beginning, without changing anything in managed-schema, I did two
range queries:

q: staffName_txt:["Gross Bob" TO "Lindmar Deborah"]   result: "Lindmar
Deborah", "Mr Kenyon John" and " Saab Jerry"

q: staffName_txt:[* TO "Lindmar Deborah"]             result: "Lindmar
Deborah", "Mr Kenyon John", " Saab Jerry" and "Gross Bob"



After that, I find the fieldType of "text_general" in managed-schema:

  <fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100" multiValued="true">

    <analyzer type="index">

      <tokenizer class="solr.StandardTokenizerFactory"/>

      <filter class="solr.StopFilterFactory" words="stopwords.txt"
ignoreCase="true"/>

      <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>

    <analyzer type="query">

      <tokenizer class="solr.StandardTokenizerFactory"/>

      <filter class="solr.StopFilterFactory" words="stopwords.txt"
ignoreCase="true"/>

      <filter class="solr.SynonymGraphFilterFactory" expand="true"
ignoreCase="true" synonyms="synonyms.txt"/>

      <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>

  </fieldType>

...

  <dynamicField name="*_txt" type="text_general" indexed="true"
stored="true"/>

...

and change two "solr.StandardTokenizerFactory" to
"solr.KeywordTokenizerFactory". I restart my Solr and repeat two range
queries:

q: staffName_txt:["Gross Bob" TO "Lindmar Deborah"]   result: "Lindmar
Deborah", "Mr Kenyon John" and " Saab Jerry"

q: staffName_txt:[* TO "Lindmar Deborah"]             result: "Lindmar
Deborah", "Mr Kenyon John", " Saab Jerry" and "Gross Bob"

It seems nothing has changed in the results.

Is there anything else I could change?

Looking forward to your reply.

Zhiqing

On Fri, 7 Jan 2022 at 18:12, Andy C <andycs...@gmail.com> wrote:

> The behavior of the range query would depend on how the fieldType used by
> the staffName_txt is configured.
>
> I believe you will find that TextField is not the fieldType, but the base
> class your fieldType is implemented on.
>
> To use an example from one of the provided example schemas, the "_text"
> field is defined as using the "text_general" fieldType
>
>    <field name="_text_" type="text_general" indexed="true" stored="false"
> multiValued="true"/>
>
> The text_general fieldType is defined as:
>
>     <fieldType name="text_general" class="solr.TextField"
> positionIncrementGap="100" multiValued="true">
>       <analyzer type="index">
>         <tokenizer class="solr.StandardTokenizerFactory"/>
>         <filter class="solr.StopFilterFactory" ignoreCase="true"
> words="stopwords.txt" />
>         <filter class="solr.LowerCaseFilterFactory"/>
>       </analyzer>
>       <analyzer type="query">
>         <tokenizer class="solr.StandardTokenizerFactory"/>
>         <filter class="solr.StopFilterFactory" ignoreCase="true"
> words="stopwords.txt" />
>         <filter class="solr.SynonymGraphFilterFactory"
> synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
>         <filter class="solr.LowerCaseFilterFactory"/>
>       </analyzer>
>     </fieldType>
>
> This fieldType definition splits the contents of the field into multiple
> tokens which each get indexed. So for example "Mr Kenyon John" would
> generate 3 tokens: "Mr", "Kenyon" and "John".
>
> If you performed your range query on this field, it would check each token
> separately to see if it was in the specified range. If any token was, the
> document would be retrieved.
>
> If you want the entire contents of the field to be treated as a single
> token, which seems to be your intent, then you should look at using a
> fieldType that is based on the Keyword Tokenizer (see
> https://solr.apache.org/guide/8_3/tokenizers.html#keyword-tokenizer).
>
> - Andy -
>
> On Fri, Jan 7, 2022 at 12:35 PM WU, Zhiqing <z...@ennov.com> wrote:
>
> > Many thanks for your reply. I have changed my query to
> > staffName_txt:["GROSS BOB" TO "LINDMAR DEBORAH"]
> > staffName_txt:["gross bob" TO "lindmar deborah"]
> > staffName_txt:["Gross Bob" TO "lindmar Deborah"]
> > Their "numFound" are identical (177). Apart from "Mr Kenyon John", my
> > search result contains " Saab Jerry", which is very confusing.
> > Therefore, I think the problem is probably not because of "character
> case"
> >
> > On Fri, 7 Jan 2022 at 17:12, Srijan <shree...@gmail.com> wrote:
> >
> > > My guess is inconsistent "character case" (uppercase/lowercase) in your
> > > indexed data vs your search query. For example, I would expect
> something
> > > like  staffName_txt:[ "Gross Bob" TO "lindmar Deborah"]   to return "Mr
> > > Kenyon John" as M indeed does lie between G and l.
> > >
> > > On Fri, Jan 7, 2022 at 11:10 AM WU, Zhiqing <z...@ennov.com> wrote:
> > >
> > > > Hello,
> > > > I am learning Solr.
> > > > In "The Standard Query Parser", I find:
> > > > Range queries are not limited to date fields or even numerical
> fields,
> > > but
> > > > also use with non-date fields (e.g. title:{Aida TO Carmen})
> > > >
> > > > I tried a range query in a Solr database (8.3)
> > > > staffName_txt:[ "Gross Bob" TO "Lindmar Deborah"]
> > > > staffName_txt is defined as a TextField.
> > > > Most searched results are correct but "Mr Kenyon John" is also in the
> > > > result list.
> > > > I think 'M' is after 'L' and should not be included in the result.
> > > > May I ask what is wrong in my query? Is there a way to avoid the
> > problem?
> > > > Many thanks in advance.
> > > > Kind regards,
> > > > Zhiqing
> > > >
> > >
> >
>

Reply via email to