По поводу английского запроса - Запрос помощи - PullRequest
3 голосов
/ 23 февраля 2010

Я работаю научным сотрудником в Центре исследований и разработок Tata, Индия. Я изучаю доступные интерфейсы естественного языка для базы данных. Во время изучения MS English Query я обнаружил, что определенный тип отношений не дает соответствующего ответа.

Наша схема выглядит следующим образом:

Schema: 
Customer ( customer_id , customer_name, customer_address) 
Transaction ( transaction_id , customer_id_1, customer_id_2, amount) 

CUSTOMER 
cuctomer_id                customer_name        customer_address 
1                        John                        abc 
2                        Rohit                        pqr 
3                        Mark                        xyz 

TRANSACTION 
transaction_id        customer_id_1        customer_id_2        amount 
1                        1                        2                        200 
2                        1                        3                        300 
3                        2                        1                        300 

Здесь customer_id_1 и customer_id_2 ссылаются на Customer.customer_id. Более двух атрибутов таблицы ссылаются на один и тот же атрибут первичного ключа в другой таблице.

Запрос: «Дайте мне все сделки между Джоном и Рохитом»

Предприятия, которые мы сделали, были Клиент и транзакция; для данного запроса на английском языке были установлены следующие отношения между клиентами и транзакциями-

Relationship Type : Noun Verb 
Relationship: Transaction are 
Preposition Clause: between Customer(customer_id_1) 
Preposition Clause: and Customer_1(customer_id_2) 

Здесь мы определили две разные роли клиентов (через 2 соединения path-customer_id_1 и customer_id_2)

Выходные данные, которые мы ожидаем, были транзакциями с trasaction_id как 1 и 3, но он соединялся только с customer_id_1 и давал результат как

Expected Output- 
transaction_id        customer_id_1        customer_id_2        amount 
1                        1                        2                        200 
3                        2                        1                        300 

Actual Output- 
transaction_id        customer_id_1        customer_id_2        amount 
1                        1                        2                        200 
2                        1                        3                        300 

Это происходит из-за неоднозначности между default и and, и мы определили в предложении предлога ..

Мы также пытались создать еще одну связь

1) 
Relationship Type : Noun Verb 
Relationship: Transaction are 
Preposition Clause: by Customer(customer_id_1) 
Preposition Clause: to Customer_1(customer_id_2) 
2) 
Relationship Type : Noun Verb 
Relationship: Transaction are 
Preposition Clause: by Customer(customer_id_2) 
Preposition Clause: to Customer_1(customer_id_1) 

Результат, который мы ожидаем, это транзакции с trasaction_id равными 1 и 3, здесь потребовалось объединение для customer_id_1 иcustomer_id_2, Но использовались только отношения 1, а не 1 и 2, поэтому вывод был следующим:

Expected Output- 
transaction_id        customer_id_1        customer_id_2        amount 
1                        1                        2                        200 
3                        2                        1                        300 

Actual Output- 
transaction_id        customer_id_1        customer_id_2        amount 
1                        1                        2                        200 

Существует ли обходной путь для создания отношений, которые позволили бы MSEQ понять вышеупомянутый запрос? Надеюсь, кто-нибудь поможет нам, предложив подходящее решение.

1 Ответ

0 голосов
/ 23 февраля 2010

Я не мог понять, что вы написали в длину. Это имело бы смысл, если бы вы могли указать, какой именно запрос вы написали. В любом случае, попробуйте следующий запрос, он будет работать.

SELECT [Transaction_Id]
      ,[Customer_Id_1]
      ,[Customer_Id_2]
      ,[Amount]
  FROM [TEST].[dbo].[Transaction] WHERE ((Customer_Id_1 = 1 AND Customer_Id_2 = 2)OR(Customer_Id_1 = 2 AND Customer_Id_2 = 1))
...