ユーザーが別の言語で検索している場合、ドキュメントが見つかりません
How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!
While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.
legacy-article
learn-legacy-article-disclaimer-text
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちら までご連絡ください。
問題
デフォルトのポータル言語を使用して、テキスト内のキーワードでテキスト ドキュメント (PDF など) を検索すると、そのドキュメントが検索結果に表示されます。
言語が異なると、ドキュメントが見つかりません。
Environment
Liferay DXP 7.0, 7.1, 7.2, 7.3
解決
ドキュメントのテキストは、Elasticsearch 要素 content_$localeの下でインデックス化されます。 $locale はポータルのデフォルト言語です (例: content_en_US)。 そのため、別の言語で検索しても結果は返されません。 詳細については、 Searching for Localized Content 参照してください。
回避策として、 Indexer Post Processor のDXP 7.0 ガイドで入手可能な BLADE サンプルを使用して DLFileEntryIndexerPostProcessor モジュールを作成します。
DXP 7.0 のサンプル コードを開始します。
/**
* Copyright 2000-present Liferay, Inc.
*/
package com.liferay.document.library.indexerpostprocessor;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.search.BooleanQuery;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.IndexerPostProcessor;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.search.filter.BooleanFilter;
import com.liferay.portal.kernel.util.LocalizationUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.Validator;
import java.util.Locale;
import org.osgi.service.component.annotations.Component;
@Component(
immediate = true,
property = {
"indexer.class.name=com.liferay.document.library.kernel.model.DLFileEntry"
},
service = IndexerPostProcessor.class
)
public class DLFileEntryIndexerPostProcessor implements IndexerPostProcessor {
@Override
public void postProcessContextBooleanFilter(
BooleanFilter booleanFilter, SearchContext searchContext)
throws Exception {
}
@Override
public void postProcessContextQuery(
BooleanQuery contextQuery, SearchContext searchContext)
throws Exception {
}
@Override
public void postProcessDocument(Document document, Object obj)
throws Exception {
DLFileEntry dlFileEntry = (DLFileEntry) obj;
Locale defaultLocale = PortalUtil.getSiteDefaultLocale(dlFileEntry.getGroupId());
String localizedField = LocalizationUtil.getLocalizedName(Field.CONTENT, defaultLocale.toString());
Field localizedContentField = document.getField(localizedField);
document.addText(Field.CONTENT, localizedContentField.getValue());
}
@Override
public void postProcessFullQuery(
BooleanQuery fullQuery, SearchContext searchContext)
throws Exception {
}
@Override
public void postProcessSearchQuery(
BooleanQuery searchQuery, BooleanFilter booleanFilter,
SearchContext searchContext)
throws Exception {
}
@Override
public void postProcessSearchQuery(
BooleanQuery searchQuery, SearchContext searchContext)
throws Exception {
}
@Override
public void postProcessSummary(
Summary summary, Document document, Locale locale, String snippet) {
if (Validator.isBlank(summary.getContent())) {
String prefix = Field.SNIPPET + StringPool.UNDERLINE;
String content = document.get(prefix + Field.CONTENT, Field.CONTENT);
summary.setContent(content);
}
}
}
DXP 7.1 の場合、このサンプルは開始点として適しています。IndexerPostProcessorに関するIndexerPostProcessor のガイドに従う必要がある場合があります。
DXP 7.2 および DXP 7.3 では、メソッド postProcessContextQuery(BooleanQuery contextQuery, SearchContext searchContext) および postProcessSearchQuery(BooleanQuery searchQuery, SearchContext searchContext) をスキップする必要があります。
注: 変更を有効にするには、このモジュールを展開した後にドキュメントとメディア エンティティを再インデックスする必要があります。
did-this-article-resolve-your-issue