Поиск SOLR, не включая данные в поле JSON

У меня есть куча документов, включенных в мой индекс SOLR. Эти документы содержат поле, содержащее данные JSON.

Когда я выполняю запрос с ключевым словом, я хочу, чтобы это поле JSON также искалось. Сейчас это не работает.

ЗАПРОС:

{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"keyword_to_search",
      "defType":"edismax",
      "qf":"title^300",
      "fl":"field_name:[json]",
      "wt":"json",
      "_":"1551735180672"
    }
  },
  "response":{
    "numFound":0,
    "start":0,
    "docs":[]
  }
}

Существуют фактические документы, содержащие поле JSON с данными «keyword_to_search».

"field_name":"{\"field_key\": \"keyword_to_search\"}",

Поле кажется доступным для поиска, так как я могу вернуть документ при запросе:

{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"{!term f=field_name}keyword_to_search",
      "_":"1551735532524"
    }
  },
  "response":{"numFound":1,"start":0,"docs":[
    {
    ...
    "field_name":"{\"field_key\": \"keyword_to_search\"}",
    }
  ]}
}

Как изменить мой запрос, чтобы включить это?

Структура JSON:

{
  ...
  "field_name": "field_value",
  "columns": [
    ...
    {
        "nested_key": "nested_value_1"
    },
    {
        "nested_key": "nested_value_1"
    },
  ],
}

person Rob Fyffe    schedule 04.03.2019    source источник


Ответы (1)


qf=title^300 сообщает Solr, какие поля он должен искать, и вес, присвоенный каждому полю.

qf=title^300 json будет выполнять поиск как в поле title, так и в поле json, и даст попаданию в поле title 300-кратное увеличение количества очков по сравнению с попаданием в поле json.

person MatsLindh    schedule 05.03.2019
comment
Спасибо, это делает запрос очень медленным из-за размера поля JSON. Должен ли я индексировать это как отдельные документы? Если да, то как мне связать их с родителем, так как это то, что я хочу вернуть, а не новые документы json. - person Rob Fyffe; 05.03.2019
comment
Если в JSON есть определенное поле, которое вы хотите найти, проиндексируйте его как отдельное поле. О каком количестве контента здесь идет речь? Извлечение его в виде отдельного документа не уменьшит количество искомых токенов, поэтому это также будет зависеть от определения field_name. - person MatsLindh; 06.03.2019
comment
Это большой объект JSON, более 20 тыс. символов. Я добавил структуру поля JSON в исходный пост. Мне нужно найти 3/4 элемента, содержащегося в объектах массива. - person Rob Fyffe; 06.03.2019
comment
Я принимаю этот ответ, поскольку он сработал. Спасибо. - person Rob Fyffe; 07.03.2019