3

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

我究竟做错了什么?第一个和最后一个片段工作得很好,只是中间那个没有。

4

2 回答 2

1

问题出在弹性搜索实例的字段索引内。根据文档,Searchkit 需要两种不同的索引字段来进行搜索和过滤。

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

要解决这个问题,您需要更改字段作者的弹性搜索映射:

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

然后,您可以通过以下方式访问 Refinementfilter 中的作者

<RefinementListFilter id="author" title="Author" field={"meta.author.raw"}/>
于 2018-12-20T14:54:46.237 回答
1

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

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

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

<RefinementListFilter id="Author" title="Author" field={"meta.author.val"}/>
于 2018-12-20T16:33:44.483 回答