mysql - solr 搜索索引从使用 GROUP_CONCAT 生成的逗号分隔值中搜索文本

标签 mysql solr group-concat

我想将 solr 搜索集成到 cakephp 中,查询一切正常,但是当我在 mysql 查询中添加 GROUP_CONCATE 时,我无法索引我的 solr 搜索 我的代码列在下面

<dataSource name="db2" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/website"
user="webname"
password="123456"/>
<document name="content">
<entity name="web" 
transformer="RegexTransformer" 
query="SELECT (SELECT GROUP_CONCAT(name separator ',') FROM tags JOIN article_tags ON tags.id = article_tags.tag_id WHERE article_tags.article_id = article.id) as tagnames,
Article.id, Article.title, Article.sub_title, Article.category_id,
Article.section_title, Article.section_body, Category.id as cat_id, 
Category.name as cat_name, Recipe.id as recipe_id, Recipe.recipe_title,  ArticleMultiBody.id as multi_id, 
ArticleMultiBody.body_title_1, ArticleMultiBody.body_text_1 FROM zahra.articles AS Article 
LEFT JOIN zahra.categories AS Category ON (Article.category_id = Category.id) 
LEFT JOIN zahra.recipes AS Recipe ON (Recipe.article_id = Article.id) 
LEFT JOIN zahra.article_multi_bodies AS ArticleMultiBody ON (ArticleMultiBody.article_id = Article.id) ORDER BY Article.title" 

deltaQuery="SELECT Article.id, Article.title, Article.sub_title, Article.category_id, Article.section_title, Article.section_body, Category.id as cat_id, Category.name as cat_name, Recipe.id as recipe_id, Recipe.recipe_title,  ArticleMultiBody.id as multi_id, ArticleMultiBody.body_title_1, ArticleMultiBody.body_text_1 FROM zahra.articles AS Article LEFT JOIN zahra.categories AS Category ON (Article.category_id = Category.id) LEFT JOIN zahra.recipes AS Recipe ON (Recipe.article_id = Article.id) LEFT JOIN zahra.article_multi_bodies AS ArticleMultiBody ON (ArticleMultiBody.article_id = Article.id) ORDER BY Article.title">
    <field column="ID" name="id" />
    <field column="TITLE" name="title" />
    <field column="SUB_TITLE" name="sub_title" />
    <field column="SECTION_TITLE" name="section_title" />
    <field column="SECTION_BODY" name="section_body" />
    <field column="CATEGORY_ID" name="category_id" />
    <field column="CREATED" name="created" dateTimeFormat="Y-m-d h:i:s" />
    <field column="KEYWORDS" name="keywords" splitBy="," sourceColName="tagnames" />
</entity>
</document>

我对下面列出的代码有疑问。

 (SELECT GROUP_CONCAT(name separator ',') FROM tags JOIN article_tags ON tags.id = article_tags.tag_id WHERE article_tags.article_id = article.id) as tagnames,

如果我删除此代码,那么我的 solr 索引工作得很好,但如果我添加此代码,我在索引 solr 时会出现错误“索引失败。回滚所有更改。”

“tagnames”是生成的新字段,由逗号分隔的值(如标签)组成 例如:食品、健康、健身等

所以我想用这个逗号分隔值配置 solr

最佳答案

仔细检查您的“关键字”字段是否在架构中定义为多值。 “索引失败”通常会告诉您原因,并提供完整的堆栈跟踪。

此外,以下实现可能会更适合您想要做的事情。 请注意,我完全删除了您的“group concat”查询并将其添加为下面的实体。仔细检查连接和字段名称,我仅根据您的命名假设连接。这样您就不会为每一行执行额外的连接 - 分割操作

<dataSource name="db2" type="JdbcDataSource"
            driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/website"
            user="webname"
            password="123456"/>
<document name="content">
<entity name="web"
        transformer="RegexTransformer"
        query="SELECT
  Article.id, Article.title, Article.sub_title, Article.category_id,
  Article.section_title, Article.section_body, Category.id as cat_id,
  Category.name as cat_name, Recipe.id as recipe_id, Recipe.recipe_title,  ArticleMultiBody.id as multi_id,
  ArticleMultiBody.body_title_1, ArticleMultiBody.body_text_1 FROM zahra.articles AS Article
  LEFT JOIN zahra.categories AS Category ON (Article.category_id = Category.id)
  LEFT JOIN zahra.recipes AS Recipe ON (Recipe.article_id = Article.id)
  LEFT JOIN zahra.article_multi_bodies AS ArticleMultiBody ON (ArticleMultiBody.article_id = Article.id) ORDER BY Article.title"
        deltaQuery="SELECT article.id, article.title, article.sub_title, article.category_id, article.section_title, article.section_body, category.id AS cat_id, category.name AS cat_name, recipe.id AS recipe_id, recipe.recipe_title,  articlemultibody.id AS multi_id, articlemultibody.body_title_1, articlemultibody.body_text_1 FROM zahra.articles AS Article LEFT JOIN zahra.categories AS CATEGORY ON (Article.category_id = CATEGORY.id) LEFT JOIN zahra.recipes AS Recipe ON (Recipe.article_id = Article.id) LEFT JOIN zahra.article_multi_bodies AS ArticleMultiBody ON (ArticleMultiBody.article_id = Article.id) ORDER BY Article.title">
  <field column="ID" name="id"/>
  <field column="TITLE" name="title"/>
  <field column="SUB_TITLE" name="sub_title"/>
  <field column="SECTION_TITLE" name="section_title"/>
  <field column="SECTION_BODY" name="section_body"/>
  <field column="CATEGORY_ID" name="category_id"/>
  <field column="CREATED" name="created" dateTimeFormat="Y-m-d h:i:s"/>
  <field column="KEYWORDS" name="keywords" splitBy="," sourceColName="tagnames"/>
  <entity name="keywords"
          pk="ARTICLE_ID"
          query="SELECT name FROM tags JOIN article_tags ON tags.id = article_tags.tag_id WHERE article_tags.article_id = '${web.ID}'">
    <field column="KEYWORDS" name="keywords"/>
  </entity>


</entity>
</document>

关于mysql - solr 搜索索引从使用 GROUP_CONCAT 生成的逗号分隔值中搜索文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23360871/

相关文章:

c# - 从数据库下拉列表中选择的指定 ID 获取值

solr - DSE/Solr : Cannot record QUEUE latency

mysql - MySQL GROUP_CONCAT 函数的替代方案

mysql - 根据另一个字段中的 2 个相同数据对字段进行分组连接

MYSQL:如何使用 GROUP_CONCAT 和分隔符使用 groupby 附加空值?

mysql - SQL 和 UTF-8(SQL 脚本)

php - 禁用唯一的 sql 行结果约束

solr - 如何向 pysolr 查询添加构面

mysql查询引用三个表

java - 更新DSpace Solr索引遇到此错误: SolrCore 'search' is not available due to init failure