SOLR теряет некоторые слова из полей с запросом функции CONCAT - как заставить обрабатывать все слова? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть документ SOLR:

{
    "id": "Test1",
    "MyInt": 100500,
    "FirstString": ["Test First String"],
    "SecondString": ["Test Second String"]
}

Управляемая схема для этого ядра:

...
  <field name="MyInt" type="plong" /> 
  <field name="FirstString" type="text_general" /> 
  <field name="SecondString" type="text_general" /> 
...

Тип "text_general" - это для правильного поиска.

Мне нужно получить конкат двух текстовых полей в / select. Я создаю такой запрос:

http://localhost:8983/solr/testcore/select?q=*:*&fl=Result:concat(FirstString,';',SecondString)

Ожидаем увидеть в результатах sometstrong texthing вроде:

Result:"Test First String;Test Second String"

Но на самом деле SOLR удаляет часть слов и оставляет только 1 слово из каждого поле. Пожалуй, самое важное, что нужно искать:

Result:"First;Second"

Не предлагайте мне изменить wt = json на wt = csv in / select, я знаю об этой функции, но в этом случае она не fit.

Посоветуйте, пожалуйста, в чем причина такого странного поведения SALS?

Возможно, это связано с тем, что данные хранятся в полях type = "text_general" с multiValued = true ? Я провел эксперимент с полями type = "string" - проблема повторяется.

Я не могу понять, как заставить SOLR взять все слова из полей text_general в запросе функции concat?

1 Ответ

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

Ваше предположение об этом из-за использования типа поля text_general верно; только первый токен будет возвращен из поля при использовании concat. Тем не менее, вы говорите, что это не работает при использовании поля string - это неверно. При использовании типа поля string (т. Е. Обработки не происходит, а текст хранится дословно как один токен), поведение будет таким, как вы запрашиваете:

{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":4,
    "params":{
      "q":"*:*",
      "fl":"FirstField_string, LastField_string, Result:concat(FirstField_string,';',LastField_string)",
      "_":"1581267948122"}},
  "response":{"numFound":1,"start":0,"docs":[
      {
        "FirstField_string":"Test First String",
        "LastField_string":"Test Second String",
        "Result":"Test First String;Test Second String"}]
  }}

Изменения имени поля происходят только потому, что Я экспериментировал с твоими оригинальными названиями полей. Для этого необходимо, чтобы поле было multiValued="false".

...