SOLR: поиск не работает с полем копирования и типом настраиваемого поля - PullRequest
0 голосов
/ 21 февраля 2020

In solrconfig. xml file

Копировать поля

<copyField source="Name" dest="NameKeywords"/>
<copyField source="Keywords" dest="NameKeywords"/>

Новое поле

  <field name="NameKeywords" type="NameKeywordFieldType" indexed="true" stored="true" multiValued="true"/>

Тип настраиваемого поля

<fieldType name="NameKeywordFieldType" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EnglishPossessiveFilterFactory"/>
       <filter class="solr.HyphenatedWordsFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EnglishPossessiveFilterFactory"/>
       <filter class="solr.HyphenatedWordsFilterFactory"/>
    </analyzer>
  </fieldType>

Итак, когда я что-то искал с полем NameKeywords , ничего не работало (возвращен пустой массив)

Результат поиска по NameKeywords

{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "q":"NameKeywords:black",
      "_":"1582270957982"}},
  "response":{"numFound":0,"start":0,"docs":[]
  }}

Но когда я искал по полю Name , все работало нормально.

Результат поиска с именем

{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"Name:black",
      "fl":"Name",
      "rows":"2",
      "_":"1582270957982"}},
  "response":{"numFound":32560,"start":0,"docs":[
      {
        "Name":"40037 Black And Stripe Top, Black & Stripe / 10"},
      {
        "Name":"40037 Black And Stripe Top, Black & Stripe / 12"}]
  }}

Так чего же не хватает в поле NameKeywords?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Поскольку вы используете KeywordTokenizerFactory, токен не будет создан, а текст будет рассматриваться как один токен. При поиске вам придется искать по одному токену.

<analyzer>
  <tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>

In: "Please, email john.doe@foo.com by 03-09, re: m37-xq."

Out: "Please, email john.doe@foo.com by 03-09, re: m37-xq."

Если вы хотите сгенерировать токены, вы должны использовать StandardTokenizer или WhitespaceTokenizer в качестве токенизатора, а не KewordTokenizer.

StandardTokenizer создает слова / токены в знаках препинания, удаляя знаки препинания.

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>

In: "Please, email john.doe@foo.com by 03-09, re: m37-xq."

Out: "Please", "email", "john.doe", "foo.com", "by", "03", "09", "re", "m37", "xq"

A WhitespaceTokenizer является токенизатором который делит текст в пробелах.

<analyzer>
  <tokenizer class="solr.WhitespaceTokenizerFactory" rule="java" />
</analyzer>

In: "To be, or what?"

Out: "To", "be,", "or", "what?"

0 голосов
/ 21 февраля 2020

Изменено:

Ключевое словоMarkerFilterFactory To StandardTokenizerFactory

<fieldType name="NameKeywordFieldType" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EnglishPossessiveFilterFactory"/>
       <filter class="solr.HyphenatedWordsFilterFactory"/>
    </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"/>
      <filter class="solr.EnglishPossessiveFilterFactory"/>
       <filter class="solr.HyphenatedWordsFilterFactory"/>
    </analyzer>
  </fieldType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...