DSE 6.7 Solr Searh всегда возвращать пустым - PullRequest
0 голосов
/ 23 января 2019

Я использую DSE 6.7 с 3 узлами, 128 виртуальных узлов на узел. Я настроил solr IKAnalyzer для поиска китайского текста. Это хорошо работает в консоли Solr, как показано на рисунке ниже: enter image description here

но в запросе это не совсем нормально, всегда возвращайте пустые данные.

enter image description here

тогда я тестирую в cassandra devCenter, он такой же, счетчик возвращаемых данных не пустой, но данные всегда пустые? enter image description here enter image description here

Может кто-нибудь помочь мне с этим?

Определение таблицы

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)
);

Схема Solr:

<?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:国税局"}';

enter image description here

Ответы [ 3 ]

0 голосов
/ 28 января 2019

@ 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:


    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)

Может быть, именно данные вызывают проблемы ИЛИ локаль в ваших кластерах / клиенте? Можете ли вы поделиться данными в текстовой форме?

0 голосов
/ 01 февраля 2019

Я пытался использовать предоставленные данные и не могу воспроизвести.

Я прилагаю скриншот, так как в редакторе SO есть ошибка (я сообщил об этом).enter image description here

Обратите внимание, что в случае префикса StrField должна стоять звезда, в то время как в IKT это не обязательно.

Так что я боюсь этогоможет быть какая-то экологическая проблема на вашей стороне, например, локаль кластера?Трудно сказать.

0 голосов
/ 24 января 2019

Я пытаюсь воспроизвести, и одна вещь мне не ясна: кажется, 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 search?

...