距離を計算するために ElasticSearch クエリを実行しようとしています。
- ElasticSearch のバージョンは1.7.2および Java 1.7.0_79 です。
- PHP フレームワーク TYPO3 フローの使用
- Neos ElasticSearch アダプターを使用
説明:
ElasticSearch によって取得される会社のリストがあります。ユーザーは、名前と場所で会社を検索できます。ここで場所が問題です。場所で検索すると、ページネーションが失われます。
状況例:
- ページネーションの itemsPerPage を 10 に設定
- 検索を実行 -> 10 個のアイテムが表示され、ページネーションは表示されません
- ページネーションの itemsPerPage を 2 に設定 -> 期待される結果は 5 ページ
- 2 項目がリストされており、ページネーションはありません
ページネーションのテンプレート:
{namespace search=TYPO3\TYPO3CR\Search\ViewHelpers}
<search:widget.paginate query="{searchQuery}" as="results" configuration="{'itemsPerPage': 2}">
<ts:render path="searchResultRenderer" context="{searchResults: results}"/>
</search:widget.paginate>
Java エラー:
org.elasticsearch.index.query.QueryParsingException: [typo3cr-1444378386] request does not support [script_fields]
at org.elasticsearch.index.query.IndexQueryParserService.parseQuery(IndexQueryParserService.java:360)
at org.elasticsearch.action.count.TransportCountAction.shardOperation(TransportCountAction.java:187)
at org.elasticsearch.action.count.TransportCountAction.shardOperation(TransportCountAction.java:66)
at org.elasticsearch.action.support.broadcast.TransportBroadcastOperationAction$AsyncBroadcastAction$1.run(TransportBroadcastOperationAction.java:170)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
エラスティックサーチ構成.yml:
# The following settings are absolutely required for the CR adaptor to work
script.file: on
script.inline: sandbox
script.indexed: sandbox
script.engine.groovy.inline: sandbox
script.engine.groovy.indexed: sandbox
script.groovy.sandbox.class_whitelist: java.util.LinkedHashMap
script.groovy.sandbox.receiver_whitelist: java.util.Iterator, java.lang.Object, java.util.Map, java.util.Map$Entry
script.groovy.sandbox.enabled: true
# the following settings are well-suited for smaller ElasticSearch instances (e.g. as long as you can stay on one host)
index.number_of_shards: 1
index.number_of_replicas: 0
私が実行するクエリは次のとおりです。
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"match_all": []
},
{
"query_string": {
"query": "*"
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"__parentPath": "/sites/project"
}
},
{
"terms": {
"__workspace": [
"live"
]
}
},
{
"term": {
"__typeAndSupertypes": "Project:Entry"
}
}
],
"should": [],
"must_not": [
{
"term": {
"_hidden": true
}
},
{
"range": {
"_hiddenBeforeDateTime": {
"gt": "now"
}
}
},
{
"range": {
"_hiddenAfterDateTime": {
"lt": "now"
}
}
}
]
}
}
}
},
"script_fields": {
"distance": {
"script": "doc['coordinates'].distanceInKm(52.39266079999999,9.768640199999936)"
}
}
}