searchkit: RefinementListFilter не может получить доступ к определенным данным в json - PullRequest
0 голосов
/ 18 декабря 2018

Я использую searchkit как часть веб-сайта, но у меня проблемы с доступом к моим данным, которые ранее были преобразованы в формат json.Мой каталог json выглядит следующим образом:

(...)
hits:
   0:
    _index:           content
    _type:            content
    _source:      
          meta:
             author:  content
(...)

json

, и я использую RefinementListFilter (в ReactDOM.render), и это прекрасно работает:

<RefinementListFilter id="index" title="Index" field={"_index"}/>
<RefinementListFilter id="Type" title="Type" field={"_type"}/>

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

<RefinementListFilter id="Author" title="Author" field={"_source.meta.author"}/>

это не работает (нет ошибки, ничего не происходит, когда я набираю это), хотя когда яиспользуйте _source.meta.author в этом контексте это работает как ожидалось:

class SearchHit extends React.Component {
    render() {
      const result = this.props.result;
      return (
        <div className={this.props.bemBlocks.item("author")}> <b> Index: </b> {result._index} </div>
        <div className={this.props.bemBlocks.item("author")}> <b> Author: </b> {result._source.meta.author} </div>
      )}}

Что я делаю не так?Первый и последний фрагменты работают просто отлично, это просто средний, который не работает.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Попробуйте реструктурировать ваш файл JSON для четкого прояснения.Вам нужно два разных поля для поиска и фильтрации.

"meta": {
      "properties": {
        "author": {
          "type": "text", 
            "fields": {
                "val": {
                    "type": "keyword"
                }
            }

Находясь в фильтре уточнения, к нему можно получить доступ таким образом

<RefinementListFilter id="Author" title="Author" field={"meta.author.val"}/>
0 голосов
/ 20 декабря 2018

Проблема в полевых индексах вашего экземпляра эластичного поиска.Согласно docs , Searchkit нужны два разных вида индексированных полей для поиска и фильтрации.

В вашем случае кажется, что поле author не проиндексировано правильно.

Чтобы решить эту проблему, необходимо изменить отображение эластичного поиска для автора поля:

    ...
    "meta": {
      "properties": {
        "author": {
          "type": "text", 
            "fields": {
                "raw": {
                    "type": "keyword"
                }
            }
    ...

Затем вы можете получить доступ к авторам в Фильтре уточнений через

<RefinementListFilter id="author" title="Author" field={"meta.author.raw"}/>
...