Open4

Reactivesearchでのエラー集

まったまった

fieldがkeyword型

今回はKibanaやLogstashなどを使わずに、ScrapyでクローリングしてきたJSONデータを少し加工してElastic Cloudからアップロードしたらbody以外の型がkeyword型になっていた。

まずこの場合は普通に検索しようとするとすべてのデータが出たままとなりコンソールに以下エラーが表示される。

failed to create query: Can only use phrase prefix queries on text fields - not on [title] which is of type [keyword]"

そこでReactivesearch側のdetaFieldもkeyword側にしてやるとエラーは消える。

<DataSearch
    componentId='searchbox'
    dataField={[
      {
	field: 'author.keyword',
	weight: 3,
      },
      {
	field: 'author.autosuggest',
	weight: 1,
      },
      {
	field: 'title.keyword',
	weight: 5,
      },
      {
	field: 'title.autosuggest',
	weight: 1,
      },
      {
	field: 'body',
	weight: 1,
      }
    ]}
    placeholder='Search for title or author or body'
  />
まったまった

ReactiveListにdataFieldがない

またコンソールを見るとReactiveListはdataFieldプロパティが必須だよとのエラーが。

Failed prop type: The prop dataField is marked as required in ReactiveList, but its value is undefined.

componentIdが「searchbox」である要素と同じdataFieldだよという意味らしく下記のように追記すればOK

  <DataSearch
    componentId='searchbox'
    dataField={[
      {
	field: 'author.keyword',
	weight: 3,
      },
	// 省略
      {
	field: 'body',
	weight: 1,
      }
    ]}
    placeholder='Search for title or author or body'
  />
  <SelectedFilters />
  <ReactiveList
    componentId='results'
    size={6}
    pagination={true}
    dataField='searchbox' // 追記
    react={{
      and: ['searchbox'],
    }}
    render={({ data }) => (
      <ReactiveList.ResultCardsWrapper>
	// 省略
      </ReactiveList.ResultCardsWrapper>
    )}
  />
まったまった

Vecelにデプロイした時に401エラーでなぜかインデックスのURLがappbase.ioを向いていた。これは環境変数が設定されていないときにデフォルトでappbase.io側のインデックスを向くようで、Vercelの環境変数を設定後にRedeployをしてもダメだったが、再度設定しなおしたり色々やってたら治った。キャッシュか?

POST https://scalr.api.appbase.io/your-index-name/_msearch? 401
{"type":"default","status":401,"ok":false,"statusText":"","headers":{"map":{"content-length":"75","content-type":"application/json"}},"url":"https://scalr.api.appbase.io/your-index-name/_msearch?","_bodyInit":{},"_bodyBlob":{},"bodyUsed":true}

ちなみに環境変数はダブルクォーテーションあってもなくても変わらないようで(改行が多いとないとエラーになったような記憶が)、またRedeploy時に「Inculude Build Cache」はオフにしといた。オンにすると環境変数などVercel側の設定だけを反映し、コード自体はキャッシュしてあるビルド済みファイルを再利用するようだ。たぶん。