【问题标题】:searchkit: RefinementListFilter can't access certain data in jsonsearchkit:RefinementListFilter 无法访问 json 中的某些数据
【发布时间】:2019-05-18 19:54:15
【问题描述】:

我正在使用 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>
      )}}

我做错了什么?第一个和最后一个 sn-p 工作正常,只是中间那个不行。

【问题讨论】:

    标签: javascript html json reactjs searchkit


    【解决方案1】:

    问题出在您的 elasticsearch 实例的字段索引中。 根据docs,Searchkit 需要两种不同的索引字段来进行搜索和过滤。

    在您的情况下,author 字段似乎没有正确索引。

    要解决这个问题,需要更改字段作者的elasticsearch映射:

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

    然后您可以通过

    访问 Refinementfilter 中的作者
    <RefinementListFilter id="author" title="Author" field={"meta.author.raw"}/>
    

    【讨论】:

      【解决方案2】:

      尝试重构您的 JSON 文件以明确说明。您需要两个不同的字段来进行搜索和过滤。

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

      在 Refinementfilter 中,可以通过这种方式访问​​它

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

      【讨论】:

        猜你喜欢
        • 2022-12-21
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多