dse 6.7 solr searh始终返回空

slmsl1lt  于 2021-06-14  发布在  Cassandra
关注(0)|答案(3)|浏览(390)

我使用的DSE6.7有3个节点,每个节点128个虚拟节点。我已经为搜索中文文本配置了solr a ikanalyzer。在solr控制台中测试正常,如下图所示:

但在查询中不可以测试,总是返回空数据。

那么我测试的是在cassandradevcenter中,它是一样的,返回的数据计数不是空的,但是数据总是空的?


有人能帮我吗?
表定义

CREATE TABLE IF NOT EXISTS rawdata.tax_law (
    type text,
    cityname text,
    items text,
    title text,
    link text,
    accessory text,
    content text,
    article date text,
    number text,
    pubdate date,
    valid text,
    PRIMARY KEY (title, type, date)
);

解决方案:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <schema name="autoSolrSchema" version="1.5">   <types>
    <fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
    <fieldType class="com.datastax.bdp.search.solr.core.types.SimpleDateField" name="SimpleDateField"/>
    <fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index" useSmart="false" >
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
        </analyzer>
        <analyzer type="query" useSmart="true" >
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
        </analyzer>
    </fieldType>   </types>   <fields>
    <field indexed="true" multiValued="false" name="title" stored="true" type="StrField"/>
    <field indexed="true" multiValued="false" name="items" type="StrField"/>
    <field indexed="true" multiValued="false" name="article_date" type="StrField"/>
    <field indexed="true" multiValued="false" name="cityname" type="StrField"/>
    <field indexed="true" multiValued="false" name="number" type="StrField"/>
    <field docValues="true" indexed="true" multiValued="false" name="pubdate" type="SimpleDateField"/>
    <field indexed="true" multiValued="false" name="content" stored="true" type="text_ik"/>
    <field indexed="true" multiValued="false" name="link" type="StrField"/>
    <field indexed="true" multiValued="false" name="type" type="StrField"/>
    <field indexed="true" multiValued="false" name="valid" type="StrField"/>
    <field indexed="true" multiValued="false" name="accessory" type="StrField"/>
    <field name="searchText" type="text_ik" indexed="true" stored="false" multiValued="true" />   </fields>   <uniqueKey>(title,type,article_date)</uniqueKey>

  <defaultSearchField>searchText</defaultSearchField>  
     <solrQueryParser defaultOperator="OR" />    <copyField source="title" dest="searchText" />   <copyField source="content" dest="searchText" />   </schema>

在这里发布我的简单表模式和测试数据,下面的查询返回空。

CREATE TABLE IF NOT EXISTS rawdata.test(
    id int,
    title text,
    content text,
    PRIMARY KEY (id, title)
);

select * from rawdata.test;
select * from rawdata.test where solr_query='{"q":"content:税法"}';
select * from rawdata.test where solr_query='{"q":"title:国税局"}';

bvuwiixz

bvuwiixz1#

@peter我做了一些实验,使用默认的strtext和ik,一切正常:

cqlsh
    Connected to master at 127.0.0.1:9042.
    [cqlsh 5.0.1 | DSE 6.7.0 | CQL spec 3.4.5 | DSE protocol v2]
    Use HELP for help.
    cqlsh> CREATE KEYSPACE rawdata WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2'}  AND durable_writes = true;
    cqlsh> 
    cqlsh> CREATE TABLE rawdata.test (
       ...     id int,
       ...     title text,
       ...     content text,
       ...     solr_query text,
       ...     PRIMARY KEY (id, title));
    cqlsh> 
    cqlsh> CREATE TABLE rawdata.test2 (
       ...     id text,
       ...     title text,
       ...     content text,
       ...     solr_query text,
       ...     PRIMARY KEY (id, title));
    cqlsh> 
    cqlsh> CREATE SEARCH INDEX ON rawdata.test;

    Warnings :
    Please remember this operation is DC specific and should be repeated on each desired DC.

    cqlsh> CREATE SEARCH INDEX ON rawdata.test2;

    Warnings :
    Please remember this operation is DC specific and should be repeated on each desired DC.

    cqlsh> 
    cqlsh> insert into rawdata.test2(id, title, content) values ('簇', '我喜欢吃鱼', '我喜欢吃鱼');
    cqlsh> insert into rawdata.test(id, title, content) values (1, '我喜欢吃鱼', '我喜欢吃鱼');
    cqlsh> 
    cqlsh> SELECT * from rawdata.test WHERE solr_query='content:我喜欢吃鱼';

     id | title | content | solr_query
    ----+-------+---------+------------

    (0 rows)
    cqlsh> SELECT * from rawdata.test2 WHERE solr_query='content:我喜欢吃鱼';

     id | title | content | solr_query
    ----+-------+---------+------------

    (0 rows)
    cqlsh> 
    cqlsh> SELECT * from rawdata.test2 WHERE solr_query='content:我喜欢吃鱼';

     id | title | content | solr_query
    ----+-------+---------+------------

    (0 rows)
    cqlsh> SELECT * from rawdata.test2 WHERE solr_query='content:我喜欢吃鱼';

     id | title | content | solr_query
    ----+-------+---------+------------

    (0 rows)
    cqlsh> commit search index on rawdata.test;
    cqlsh> commit search index on rawdata.test2;
    cqlsh> SELECT * from rawdata.test2 WHERE solr_query='content:我喜欢吃鱼';

     id | title      | content    | solr_query
    ----+------------+------------+------------
     簇 | 我喜欢吃鱼 | 我喜欢吃鱼 |       null

    (1 rows)
    cqlsh> SELECT * from rawdata.test WHERE solr_query='content:我喜欢吃鱼';

     id | title      | content    | solr_query
    ----+------------+------------+------------
      1 | 我喜欢吃鱼 | 我喜欢吃鱼 |       null

a我也无法用ik analyzer再现问题:

automaton@ip-10-200-175-18:~$ cqlsh
    Connected to master at 127.0.0.1:9042.
    [cqlsh 5.0.1 | DSE 6.7.0 | CQL spec 3.4.5 | DSE protocol v2]
    Use HELP for help.
    cqlsh> describe active search index schema on rawdata.test2;

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <schema name="autoSolrSchema" version="1.5">
      <types>
        <fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
        <fieldType name="text_ik" class="solr.TextField">
            <analyzer type="index" useSmart="false" >
                    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
            </analyzer>
            <analyzer type="query" useSmart="true" >
                    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
            </analyzer>
        </fieldType>
      </types>
      <fields>
        <field indexed="true" multiValued="false" name="title" type="StrField"/>
        <field indexed="true" multiValued="false" name="content" type="text_ik"/>
        <field indexed="true" multiValued="false" name="id" type="StrField"/>
      </fields>
      <uniqueKey>(id,title)</uniqueKey>
    </schema>

    cqlsh> SELECT * from rawdata.test2 WHERE solr_query='content:我喜欢吃鱼';

     id | title      | content    | solr_query
    ----+------------+------------+------------
     簇 | 我喜欢吃鱼 | 我喜欢吃鱼 |       null

    (1 rows)

可能是数据导致了问题或集群/客户机上的区域设置?你能以文本形式分享数据吗?

qv7cva1a

qv7cva1a2#

我试过提供的数据,但我无法复制。
我附上截图,以便编辑器有一个错误(我已经报告了它)。

请注意,如果是strfield,前缀后面必须跟一个星号,而对于ikt则没有必要。
所以我担心这可能是你这边的一些环境问题,比如集群区域设置?很难说。

vaqhlq81

vaqhlq813#

我正在努力繁殖,但有一件事我并不清楚:似乎 type 是一个关键字,我只是不确定表创建/索引创建是否进行得很好。
表创建提供了

CREATE TABLE IF NOT EXISTS rawdata.tax_law ( type text, cityname text, items text, title text, link text, accessory text, content text, article date text, number text, pubdate date, valid text, PRIMARY KEY (title, type, date) );

不起作用
不使用dse搜索,你能从纯cassandra查询中得到正确的数据吗?

相关问题