Apache Solrによるグローバル検索について

Re: Apache Solrによるグローバル検索について

- Ryotaro Yamada の投稿
返信数: 3

試行手順をご教示いただきありがとうございます。

現環境の各バージョンについては、以下の通りです。

CentOS Linux release 7.7.1908 (Core)

Apache Solr 8.0.0

Moodle 3.6.3

ご案内の下記手順を試しましたが、結果は変わりませんでした。

  1. サイト管理者としてMoodleにログインする。
  2. 「管理 > サイト管理 > プラグイン > 検索 > グローバル検索を管理する」に移動する。
  3. 「4. データをインデックス化する」をクリックする。
  4. 「すべてのインデックスコンテンツを削除する」をクリックする。
  5. 「続ける」をクリックする。
  6. 「すべてのサイトコンテンツを再インデックス化する」をクリックする。
  7. 「続ける」をクリックする。

また、Solrコアを削除 → 再作成をしてみた上で試してみても同じ結果でした。

なお、Solrコアを作成および再作成した際には、以下のようなメッセージが表示されました。

$ /opt/solr/bin/solr create_core -c moodle-core

WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.

         To turn off: bin/solr config -c moodle-core -p 8983 -action set-user-property -property update.autoCreateFields -value false

INFO  - 2020-01-14 13:40:50.081; org.apache.solr.util.configuration.SSLCredentialProviderFactory; Processing SSL Credential Provider chain: env;sysprop


Created new core 'moodle-core'

また、インデックス作成後に検索したときにSolr側(http://xx.xx:8983/solr/#/)で添付画像のログが表示されました。

ログをクリックすると詳細が表示されるのですが、その詳細が以下となります。

org.apache.solr.common.SolrException: org.apache.solr.search.SyntaxError: Query Field 'title' is not a valid field name

at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:216)

at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:272)

at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)

at org.apache.solr.core.SolrCore.execute(SolrCore.java:2559)

at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:711)

at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:516)

at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:394)

at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:340)

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)

at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)

at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at org.eclipse.jetty.server.Server.handle(Server.java:502)

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)

at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)

at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)

at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)

at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)

at java.lang.Thread.run(Thread.java:748)

Caused by: org.apache.solr.search.SyntaxError: Query Field 'title' is not a valid field name

at org.apache.solr.search.ExtendedDismaxQParser.checkFieldInSchema(ExtendedDismaxQParser.java:275)

at org.apache.solr.search.ExtendedDismaxQParser.checkFieldsInSchema(ExtendedDismaxQParser.java:287)

at org.apache.solr.search.ExtendedDismaxQParser.validateQueryFields(ExtendedDismaxQParser.java:226)

at org.apache.solr.search.ExtendedDismaxQParser.parse(ExtendedDismaxQParser.java:151)

at org.apache.solr.search.QParser.getQuery(QParser.java:173)

at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:158)

... 41 more

Caused by: org.apache.solr.common.SolrException: undefined field: "title"

at org.apache.solr.schema.IndexSchema.getField(IndexSchema.java:1234)

at org.apache.solr.search.ExtendedDismaxQParser.checkFieldInSchema(ExtendedDismaxQParser.java:273)

... 46 more

※ログの中にmycoreに関するエラーが出ていますが、単にコア名を打ち間違えたものですので、それについては無視してください。


さらに、Moodle Trackerで以下のチケットを発見しました。

Solr 7.x compatibility with Moodle search plugin

https://tracker.moodle.org/browse/MDL-60759

Moodle3.5でSolr7.xに対応したようなのですが、

そうなるとSolr8.xはまだ対応していないのかもしれないと思い、

Solrの8.0.0をアンインストールして7.xをインストールしようか検討しています。

以上、よろしくお願いいたします。

添付 Solrのログ.PNG
評点平均: お役立ち度: ★★★★★★★ (1)
Ryotaro Yamada への返信

Re: Apache Solrによるグローバル検索について

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

以下の環境で確認してみましたが、ご推測どおり、Apache Solr 8.0.0の場合にはエラーが発生するようです。

CentOS Linux release 7.7.1908 (Core)
Apache 2.4.41
PHP 7.1.33
Moodle 3.8.1 (Build: 20200113)

Apache Solr 8.0.0
グローバル検索: エラー「あなたが提供したクエリは検索エンジンによって構文解析することができませんでした: undefined field: "solr_filegroupingid"

Apache Solr 7.7.2
グローバル検索: 正常動作

Apache Solr 6.6.6
グローバル検索: 正常動作

評点平均: お役立ち度: ★★★★★★★ (1)
Mitsuhiro Yoshida への返信

Re: Apache Solrによるグローバル検索について

- Ryotaro Yamada の投稿

ご確認ありがとうございます。

自分の環境に限らず、Apache Solr 8.0.0が動かないことを知れて、助かりました。

当方のミドルウェアについても記載いたします。

CentOS Linux release 7.7.1908 (Core)

Apache 2.4.6

PHP 7.2.26

Apache Solr 8.0.0

Moodle 3.6.3

こちらでもApache Solr 7を入れてみて、動作したらそれを使おうと思います。

そのあとで、Moodle Trackerに報告しようと思います。

ありがとうございました。

評点平均: お役立ち度: ★★★★★★★ (1)
Ryotaro Yamada への返信

Re: Apache Solrによるグローバル検索について

- Ryotaro Yamada の投稿

その後、Moodle3.7.4にバージョンアップし、かつPHPを7.3.14にしたところ、

最新のApache Solr 8.4.1で検索できましたので、ご報告いたします。


------------------------------------------------------------


※Moodle3.6はPHP7.3の運用準備ができていないようなので、参考

[Grobal Search NG]

CentOS Linux release 7.7.1908 (Core)

Apache 2.4.6

PHP 7.3.14

Apache Solr 8.4.1

Moodle 3.6.3

あなたが提供したクエリは検索エンジンによって構文解析することができませんでした: org.apache.solr.search.SyntaxError: Query Field 'title#0;' is not a valid field name


------------------------------------------------------------

[Grobal Search OK]

CentOS Linux release 7.7.1908 (Core)

Apache 2.4.6

PHP 7.3.14

Apache Solr 8.4.1

Moodle 3.7.4


評点平均: お役立ち度: ★★★★★★★ (1)